2015-09-04 3 views
9

Я новичок в угловой, хочу знать, почему и когда мы должны вводить все наши необходимые зависимости два раза.Почему мы вводим наши зависимости два раза в angularjs?

Пример:

var analysisApp=angular.module('analysisApp',[]); 

analysisApp.controller('analysisController',function($scope,$http,$cookies,$state,globalService){ 

}); 

Но мы также можем написать код выше как:

var analysisApp=angular.module('analysisApp',[]); 

analysisApp.controller('analysisController',['$scope','$http','$cookies','$state','globalService',function($scope,$http,$cookies,$state,globalService){ 

}]); 

Почему?

+0

его аннотация по зависимостям см. На этом https://docs.angularjs.org/guide/di –

+2

Возможный дубликат [Angularjs minify best practice] (http://stackoverflow.com/questions/18782324/angularjs-minify-best -практика) – SomeKittens

ответ

13

Это приложение minsafe.

Осторожно: если вы планируете минимизировать свой код, ваши имена зависимостей будут переименованы и разорваны ваше приложение.

Когда вы (или может), Минимизировать все файлы, зависимости заменяются словами как a, b, ... и т.д.

Но, когда вы используете массив и строку подобный синтаксис, как показано во втором фрагменте, string никогда не уменьшают и могут использоваться для сопоставления. Итак, приложение знает, что a - $scope (см. Пример ниже).

Пример:

// The minified version 
var _ = angular.module('analysisApp', []); 

_.controller('analysisController', ['$scope', '$http', '$cookies', '$state', 'globalService', function (a, b, c, d, e) { 
    a.name = 'John Doe'; // Now a here is `$scope`. 
}]); 

См Angular Docs

Вот хороший article для создания вашего приложения minsafe с Грантом.

Для минификации лучших практик: Angularjs minify best practice

2
var analysisApp=angular.module('analysisApp',[]); 

analysisApp.controller('analysisController',['$scope','$http','$cookies','$state','globalService',function($scope,$http,$cookies,$state,globalService){ 

}]); 

В этом случае, когда и Минимизировать код приведенный выше код может стать как

var analysisApp=angular.module('analysisApp',[]); 

analysisApp.controller('analysisController',['$scope','$http','$cookies','$state','globalService',function(a,b,c,d, e){ 

}]); 

В этом случае a, b, c, d будет Holde в refrence из '$scope','$http','$cookies','$state','globalService' соответственно и все будет работать так, как ожидалось.

'$scope','$http','$cookies','$state','globalService' не будет изменен, потому что это строка, как строка не изменяется в минификации

analysisApp.controller('analysisController',function($scope,$http,$cookies,$state,globalService){ 

}); 

Но в этом случае после минификации может стать как

analysisApp.controller('analysisController',function(a, b, c, d, e){ 

}); 

Теперь все угловатыми объектами, такими как $scope and other потеряли смысл, и все не сработает.

3

Зависимость впрыска в Угловые работы путем подбора функции и определения ее аргументов. Это довольно хрупко, особенно когда вы сокращаете свой код, потому что эти имена переменных будут искажены, и ваше приложение будет ломаться. Обходной путь заключается в том, чтобы указать Angular название этих инъекций на строку, которая не будет искажена.Другими словами, если ваш код получает уменьшенная это будет выглядеть следующим образом:

analysisApp.controller('analysisController', 
['$scope','$http','$cookies','$state','globalService', function(a,b,c,d,e) { 

}]); 

Под крышками, Угловое будет соответствовать $scope к a, $http к b, и так далее.

Другая возможность заключается в использовании ngannotate, который является предпроцессорным инструментом для добавления в процесс сборки. Он возьмет первый код и превратит его во второй.

Смежные вопросы