Angularjs минимизировать лучшую практику
Я читаю http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.html и оказалось, что у внедрения angularjs есть проблемы, если вы минимизируете свой JavaScript, поэтому я мне интересно, если вместо
var MyController = function($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.success(function(commits) {
$scope.commits = commits
})
}
ты должен использовать
var MyController = ['$scope', '$http', function($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.success(function(commits) {
$scope.commits = commits
})
}]
all in all I thought the second snippet was for the old version of angularjs but....
Should I always use the inject way (the second one)?
6 ответов
Да всегда! Таким образом, даже если ваш минифер преобразует $scope в переменную a и $http в переменную b, их идентичность все еще сохраняется в строках.
См. Эту страницу документации AngularJS, прокрутите вниз до заметки о минификации.
ОБНОВИТЬ
Кроме того, вы можете использовать пакет ng-annotate npm в процессе сборки, чтобы избежать этого многословия.
Безопаснее использовать второй вариант, но также можно безопасно использовать первый вариант с помощью ngmin.
ОБНОВИТЬ:
Теперь ng-annotate становится новым инструментом по умолчанию для решения этой проблемы.
Да, вам нужно использовать явное внедрение зависимостей (второй вариант). Но, поскольку в Angular 1.3.1 вы можете отключить неявное внедрение зависимостей, действительно полезно решить потенциальные проблемы с переименованием сразу (до минификации).
Отключение неявного DI, используя strictDi
свойство config:
angular.bootstrap(document, ['myApp'], {
strictDi: true
});
Отключение неявного DI, используя ng-strict-di
директива:
<html ng-app="myApp" ng-strict-di>
Просто чтобы указать, что если вы используете
нет необходимости делать как
var MyController = ['$scope', '$http', function($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.success(function(commits) {
$scope.commits = commits
})
}]
потому что ворчание во время минификации учитывает, как управлять DI.
Как сказал OZ_, используйте ngmin для минимизации всех угловых js-файлов, таких как directive.js service.js. После этого вы можете использовать компилятор Closure для его оптимизации.
ссылка:
Используйте строгое внедрение зависимостей для диагностики проблем
При использовании неявной аннотации код при минификации сломается.
Из Документов:
Неявная аннотация
Осторожно: если вы планируете минимизировать свой код, имена ваших сервисов будут переименованы и ваше приложение сломается.
Вы можете добавить ng-strict-di
директива для того же элемента, что и ng-app
чтобы выбрать строгий режим DI.
<body ng-app="myApp" ng-strict-di>
Строгий режим выдает ошибку всякий раз, когда служба пытается использовать неявные аннотации.
Это может быть полезно для определения проблем.
Для получения дополнительной информации см.
Вы можете использовать $inject
как уже упоминалось здесь:
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
})
}