2014-03-07 58 views
2

我有一個非常簡單的角示例http://jsfiddle.net/7eL47/3/。代碼的渲染輸出在頁面上顯示「Foobar」。不能把控制器放在指令上?

此渲染輸出的模板是:

<div ng-app="myApp" ng-controller="MenuController"> 
    <unordered-list> 
     Foo{{foo}} 
    </unordered-list> 
</div> 

但是,當我改變的ng-controller位置到unordered-list如下圖所示,「Foobar的」不再出現 - 它只是「富」。 {{foo}}的值永遠不會被「bar」替代。

<div ng-app="myApp"> 
    <unordered-list ng-controller="MenuController"> 
     Foo{{foo}} 
    </unordered-list> 
</div> 

爲什麼我看不到「Foobar的」還是當我改變ng-controller指令是unordered-list元素?

+0

指令可以有自己的控制器;所以我想這就是原因。如果很容易替換指令的內部部分,我可以想象出很多噩夢問題。 – JeffryHouser

回答

1

在您的第一個示例中,ngControllerunordered-list的父級。所以它對foo有可見性。

你的第二個例子:

<unordered-list ng-controller="MenuController"> 

結果2兄弟作用域每個ngApp父。

您的指令和ngController directive都使用scope: truescope: true會導致爲從該父項繼承的該指令創建子範圍。因此,您最終會看到兄弟範圍。

因此,在第二個示例中,$scope.foo不可見,因爲它不再位於範圍unoderedList繼承範圍內(而是在同級範圍內)。