1

Я столкнулся с довольно неинтуитивным аспектом директив AngularJS, и мне любопытно, есть ли логическая причина такого поведения. Когда я указать контроллер в определению директивы:Задание контроллера в определении директивы не создает новую область

angular.module('MyApp.directives', []) 
    .directive('myDirective, function() { 
     templateUrl: "my-template.html", 
     controller: "MyController" 
    }; 

область шаблона в директивах является одинаковым для всех экземпляров директивы.

Однако, если я не указать контроллер в определении директивы:

angular.module('MyApp.directives', []) 
    .directive('myDirective, function() { 
     templateUrl: "my-template.html" 
    }; 

и вместо того, чтобы определить контроллер непосредственно на директиве, используя ng-controller:

<my-directive ng-controller="MyController"/> 

каждый экземпляр MyController получает собственный охват ребенка.

Я ожидал, что эти подходы приведут к тем же результатам, но, по-видимому, Angular рассматривает область контроллера по-разному в зависимости от того, как объявлен контроллер. Есть ли причина для этой разницы?

ответ

0

Причина этого, я считаю, в том, что директива как определение является одноэлементной. Поэтому, когда вы вводите контроллер как свойство на объект возврата singleton, он используется для всех экземпляров.

Но когда вы определяете разметку с ng-контроллером, директива ng-controller создает экземпляр этого контроллера для каждого элемента, поэтому он создает новый контроллер (и, следовательно, новую область) для каждого экземпляра директивы.

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