1

我遇到了AngularJS指令的一個相當不直觀的方面,我很好奇這種行爲是否存在邏輯原因。當我指定的指令的定義控制器:在指令定義中指定控制器不會創建新的作用域

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

指令的模板的範圍是該指令的所有實例相同。

但是,如果我指定指令的定義控制器:使用ng-controller直接

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

,而是定義控制器的指令:

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

的每個實例MyController收到自己的子範圍。

我期望這些方法能夠產生相同的結果,但顯然Angular根據控制器的聲明來區別控制器的範圍。是否有這種差異的原因?

回答

0

我相信這個原因是指令作爲一個定義是單例。因此,當您將控制器作爲單例返回對象的屬性輸入時,它將爲所有實例共享。

但是,當您使用ng-controller定義標記時,ng-controller指令在每個元素上實例化該控制器,因此它爲每個指令實例創建一個新的控制器(並因此創建一個新的作用域)。

相關問題