指令scope與controller中$scope交互的幾種方式

你想修改controller的$scope。首先你自己定義的指令就是用的controller中的scope。它沒有繼承或者獨立出來一個scope。所以你修改你指令的scope下的屬性肯定會修改引用這個指令的controller的scope對應屬性。
你可能會問,爲何我寫的這個沒有修改controller的scope呢?
原因在於你使用了
iElement.on('click', '#addTaskClass', function(event) {
scope.addTaskClassBoxDisplay = true;
你自己定義的click監聽器,觸發修改scope屬性,它不會通知angular進行髒檢查的。也就是說你修改了addTaskClassBoxDisplay,它在頁面上也不會有反應的。
如何修改這個錯誤。 增加 $apply()即可。手動觸發髒檢查。怎麼用,自行百度。
接下來回到你的問題。如何來讓directive修改controller的scope。
一、首先從directive內部屬性說起。
directive的scope屬性,它的三種方法都可以修改controller的scope。
1.scope不定義或者scope:false。它是直接用的controller的scope
2.scope:true。它是繼承controller的scope。這時候,你要修改的內容最好定義爲一個對象。
3.scope:{key:'=key'}。它是獨立出一個scope。修改方法同上,最好定義爲對象
然後再講一個。使用 iAttrs,將它定義給指令上的一個屬性。
var model = $parse(iAttrs.addTaskClassBoxDisplay);
iElement.on('click', '#addTaskClass', function(event) {
model.assign(scope,true);
scope.$apply();
二、使用廣播。具體百度。
三、使用service來傳遞。
四、指令調用$rootScope 然後讓controller的scope屬性等於$rootScope的屬性。(千萬別這麼做)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章