2013-07-26 2 views
0

Название может быть немного обманчивым, но я не мог придумать лучшего описания.Выбор области действия

Я написал директиву, которая включает в себя ng-repeat:

app.directive('appDirective',function($purr){ 
    var template = '' + 
     '<div ng-repeat="elements in queue">' +    
     '</div>'; 

    return{ 
     template: template 
    } 
}); 

Если я правильно, я могу выбрать между двумя способами обеспечения queue моей директивой

1: с помощью ссылки функции

return{ 
     restrict: 'A', 
     template: template, 
     link: function(scope){ 
       scope.queue =[]; 
     } 
    } 

2: через контроллер

return{ 
     restrict: 'A', 
     template: template, 
     controller: directiveCtrl 
    } 

app.controller('directiveCtrl',function($scope){ 
    $scope.queue = []; 
}); 

Какой способ выбрать, и почему?

+1

Это, вероятно, не имеет значения. Обратите внимание, что контроллер будет работать до функции связи. –

+0

Спасибо. Может ли этот факт вызвать какие-либо побочные эффекты? – user2422960

+1

Я сомневаюсь. Я видел несколько примеров, когда люди задали свойство scope в функции ссылок и пытались получить к нему доступ в функции контроллера (и задавались вопросом, почему он еще не существует). –

ответ

1

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

This fiddle журналы, когда функции контроллера и ссылки работают с двумя вложенными директивами.

Смотрите также Difference between the 'controller', 'link' and 'compile' functions when defining a directive

. 
+0

Спасибо за разъяснение. Лично я бы сказал, что правильнее применять контроллер. С другой стороны, я бы подумал, что второй способ - более эффективный. – user2422960

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