Ich lese gerade http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.html undes stellte sich heraus, dass die Injektion von anglejs Abhängigkeit Probleme hat Wenn Sie Ihr Javascript minimierenso frage ich mich, wenn statt
var MyController = function($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.success(function(commits) {
$scope.commits = commits
})
}
du solltest benutzen
var MyController = ['$scope', '$http', function($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.success(function(commits) {
$scope.commits = commits
})
}]
alles in allem dachte ich, der zweite Ausschnitt war für die alte Version von anglejs, aber ....
Soll ich immer den Injektionsweg verwenden (den zweiten)?
Ja , immer! Selbst wenn Ihr Minifer also $ scope in Variable a und $ http in Variable b konvertiert, bleibt deren Identität in den Zeichenfolgen erhalten .
Siehe diese Seite in AngularJS-Dokumenten, scrollen Sie nach unten zu Ein Hinweis zur Minimierung.
UPDATE
Alternativ können Sie das Paket ng-annotate npm in Ihrem Erstellungsprozess verwenden, um diese Ausführlichkeit zu vermeiden.
Es ist sicherer, die zweite Variante zu verwenden, aber es ist auch möglich, die erste Variante sicher mit ngmin zu verwenden.
UPDATE:
Jetzt ng-annotate wird zu einem neuen Standardwerkzeug, um dieses Problem zu lösen.
Nur um darauf hinzuweisen, wenn Sie verwenden
es ist nicht nötig, etwas zu tun
var MyController = ['$scope', '$http', function($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.success(function(commits) {
$scope.commits = commits
})
}]
weil grunt während minify berücksichtigt, wie man DI verwaltet.
Ja, Sie müssen die explizite Abhängigkeitsinjektion (zweite Variante) verwenden. Aber da Angular 1.3.1 Sie die implizite Abhängigkeitsinjektion deaktivieren können, ist es sehr hilfreich, potenzielle Probleme beim Umbenennen sofort zu lösen (vor der Verkleinerung).
Deaktivieren Sie die implizite DI mit der Eigenschaft strictDi
config:
angular.bootstrap(document, ['myApp'], {
strictDi: true
});
Implizite DI deaktivieren mit ng-strict-di
Richtlinie:
<html ng-app="myApp" ng-strict-di>
Wie OZ_ sagte: Verwenden Sie ngmin, um alle eckigen JS-Dateien zu minimieren, wie z. B. direct.js service.js. Danach können Sie den Closure-Compiler zur Optimierung verwenden.
ref:
Vielleicht möchten Sie $inject
verwenden, wie er hier :
MyController.$inject = ['$scope', '$http'];
function MyController($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.success(function(commits) {
$scope.commits = commits
})
}