2015-08-05 4 views
1

Я уже прочитал документацию AngularJS, но до сих пор не получил ответа, который я понимаю.Зависимость впрыска в Угловом JS

Почему это используется дважды? Один раз в качестве элементов массива, второй - как параметры функции.

someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) { 
    // ... 
}]); 
+1

minification/uglify может сломать код в противном случае (но вы можете настроить его так, как это не делает :)) –

ответ

2

Если вы Минимизировать этот код:

someModule.controller('MyController', function($scope, greeter) { 
    // ... 
}); 

Вы закончите с (что-то вроде):

someModule.controller('MyController', function(a, b) { 
    // ... 
}); 

Угловая не будет иметь возможность вводить зависимости, так как параметры имена теряются.

С другой стороны, если вы Минимизировать этот код:

someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) { 
    // ... 
}]); 

Вы закончите с:

someModule.controller('MyController', ['$scope', 'greeter', function(a, b) { 
    // ... 
}]); 

Название параметров: DI угловые является эксплуатационным.

1

Мини-код преобразует ваш код во что-то более легкое и быстрое скачивание. Вам просто нужно сделать что-то вроде объявления об инъекции зависимостей, прежде чем вставлять его в функцию и использовать ее, НО только в том случае, когда вам нужно будет использовать мини-классификацию.

Ваша функция требует «$ scope» и «greeter». Если вы пишете так:

someModule.controller('MyController', function($scope, greeter) { // ... 
}); 

..и затем использовать минификация, контроллер будет обратиться:

someModule.controller('MyController',function(a,b) { // ... 
}); 

..то контроллер «MyController» не поймет, где, черт возьми " $ scope "и" greeter ", он будет видеть только параметр" a "и параметр" b ".

По этой причине лучше всего использовать массив:

someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) { // ... 
}]); 

..и затем использовать минификация:

someModule.controller('MyController', ['$scope', 'greeter', function(a, b) { // ... 
}]); 

Как вы можете видеть, первый и второй элемент массива не преобразованный, и javascript будет знать, что «a» и «b» - это элементы внутри массива для ввода функции.

Обратите внимание, что если вы пишете что-то вроде:

someModule.controller('MyController', ['$scope', '$log', function($log, $scope) { 
console.log($scope); 
    }]); 

Вы будете иметь журнал консольных $ журнала! Это потому, что положение и только вопросы положения, можно назвать:

someModule.controller('MyController', ['$scope', '$log', function(Donald, Duck) { 
console.log(Duck); 
    }]); 

Он пошлет вас обратно журнал консольных $ бревенчатого элемента.

+0

Я не думаю, что это правда. Если я использую .controller ('createUpdate', функция ($ scope, $ http, $ routeParams, $ route, $ location, $ window) {... все работает. –

+0

Отредактировано в более правильной форме :) –

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