2013-12-18 5 views
1

При чтении через документацию по AngularJS услуг, я наткнулся например услуги, написанных как:инъекционные зависимости в AngularJS службы

myApp.service('fooGetter', ['$http', function($http) { 
    this.getFoo = function() { 
     // use $http to get some foo 
    } 
}]); 

где $http вводится в оболочку службы, поэтому он может ссылаться из службы созданный экземпляр. В чем причина синтаксиса массива, который содержит список параметров, которые затем дублируются в параметрах функции? Я не смог найти хорошее объяснение цели этого, его правил и почему это необходимо. Та же услуга, написанная без этого, например:

myApp.service('fooGetter', function($http) { 
    this.getFoo = function() { 
     // use $http to get some foo 
    } 
}); 

, похоже, имеет прекрасную автоматическую ссылку на эту переменную.

ответ

5

Если вы используете синтаксис без массива, содержащего вложенные зависимости, то угловое использует отражение для чтения аргументов вашей функции. Это нормально работает нормально, но если вы хотите уменьшить свой код, ваши аргументы изменят имя, и угловой перестанет работать. Использование синтаксического обозначения массива позволит угловому продолжению поиска правильных зависимостей, даже если ваши имена аргументов изменяются.

Кроме того, если ваши инъецируемые службы имеют действительно длинные имена, вы можете вводить их с помощью синтаксиса массива и давать им более легкое имя для использования в списке аргументов функции.

Пример:

app.controller("MyCtrl", ["MyReallyLongUserServiceName", function(User) { 
    User.doSomething(); 
}]); 
+0

Получил это ... спасибо! ответит, но придется подождать несколько минут, прежде чем он позволит мне ... – chinabuffet

3

Этот синтаксис массива необходимо, если вы планируете Минимизировать код JS, так что закачка до сих пор работает. Действительно, minifier изменит имя аргументов анонимной функции, а угловое использует это имя, чтобы знать, что вводить в функцию. Этот альтернативный синтаксис решает проблему, определяя имя аргументов как строки, которые не будут затронуты минитором.

Обратите внимание, что это объясняется в официальной документации page about dependency injection.

+0

Определенно пропустили это, спасибо, что указали это. – chinabuffet

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