2015-02-25 3 views
0

Я обычно объявляем один контроллер так:Контроллер AngularJS: что такое правильный синтаксис?

.controller('myController', function($scope,/*other dependecies go here*/){ 
    // controller definition 
}; 

Однако в некоторых примерах (в том числе один из официальной документации AngularJS в) я нашел что-то вроде:

angular.module('controllerExample', []) 
    .controller('SettingsController2', ['$scope', SettingsController2]); 

function SettingsController2($scope) { 
    // controller definition 
}; 

или просто (что эквивалентно, я думаю,):

angular.module('controllerExample', []) 
    .controller('SettingsController2', ['$scope', function(){ 
    // controller definition 
    } 
]); 

Теперь, я не понимаю, в чем собственно разница между фрагмент 1) и фрагменты 2) и 3)

Кроме того, я не понимаю, почему иногда та же зависимость является как снаружи определения функции и параметры функции (например, фрагмент 3)), но за пределами - без $ и внутри - с (извините, я не могу найти пример сейчас. Но я уверен, что у меня была такая ситуация).

Спасибо заранее

ответ

4

Синтаксис массива, чтобы предотвратить угловое от взлома, когда код проходит через Minifier. Если вы не уменьшаете свой javascript, на самом деле нет большой разницы, кроме того, что вы набираете больше/меньше. Угловые читают в этих функциях как строку и обрабатывают их. Некоторые министры закручивают это, так что странный синтаксис является текущим решением.

+0

спасибо. как насчет внутренней/внешней вещи? – dragonmnl

+0

'' 'просто означает, что это угловой встроенный сервис. Внутри/снаружи не влияет на использование '$' –

2

@ Ответ jwimmer правильный, но я хочу предложить еще одну возможность. Вы можете немного очистить синтаксис и безопасно сохранить свой код с помощью $inject.

someCtrl.$inject = ['$scope', 'someDependency']; 
function someCtrl($scope, someDependency) { 
    ... 
} 

angular.module('someApp') 
    .controller('someCtrl', someCtrl); 
+0

Это на самом деле мой второй фрагмент. правильно? – dragonmnl

+0

Не совсем. В моем примере используется '$ injection'. Он выполняет то же самое, хотя, как раз с более чистым синтаксисом, на мой взгляд. См. Https://docs.angularjs.org/api/auto/service/$injector –

+0

Кроме того, делая это таким образом, вы сохраняете правильную ассоциацию с инъекциями прямо с определением, поэтому, если вы должны добавить/удалить зависимость, то вы увидите и, следовательно, не забудьте изменить ссылку на строку – Brocco

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