2012-12-26 70 views
4

通常。在我的指令中,我需要從另一個指令(或它的作用域)獲取一些信息並將其放入作用域(在指令模板中可見)。由於此信息對於此指令的所有實例都很常見,因此使用作用域綁定對我來說聽起來不太合適。在AngularJS的範圍的修改是在控制器進行的所有的實施例/源代碼鏈接函數內修改範圍在AngularJS

於是我找到的唯一解決方案是修改實例範圍內的連接功能:

link: function(scope, element, attr, parentCtrl) {  
    scope.data = parentCtrl.someData;  
} 

此解決方案。 Plnkr example

的問題是:它是確定根據AngularJS理念/風格修改範圍在鏈接功能或有另一種解決方案?

+0

你能張貼你的意思的例子嗎?該鏈接僅適用於初學者項目 –

+0

對不起,我是plnkr新手。更改鏈接。 –

回答

1

因爲要創建隔離示波器在您的指令(在你的榜樣plnkr),並且要在允許父母是「地方」範圍層次結構(根據您對@MathewBerg的評論),我相信您唯一的選擇是使用鏈接函數修改範圍。

(我想你可以定義你的MainCtrl方法,只有孩子的指令應該調用,但執行這將是混亂和破壞封裝)。

所以,呼應什麼@MathewBerg已經說了,是的,修改的範圍,指令/鏈接功能。

1

在指令修改範圍是罰款。至於指令之間的信息共享,有幾種方法。一個是你所說,你訪問家長控制,並得到它的數據的方式,另一個非常類似的方法將有

scope.data = scope.$parent.data; 

而不是

scope.data = parentCtrl.someData; 

共享指令之間的東西的一般方法雖然是使用服務。這將允許您將服務注入到每個指令中,並且可以共享這些值。初始方法(以及我所描述的方法)的問題是,如果您將元素移動以使範圍層次結構發生變化,您的代碼將會中斷。這就是爲什麼我會建議使用兩種服務。我建議你閱讀service docs。還有大量的視頻在那裏描述如何對它們進行設置:http://www.youtube.com/watch?v=1OALSkJGsRw

+0

如果我有幾個具有不同數據的「父」方向,我不能使用Servicies(我修改了Plnkr例子來反映這一點)。 而關於層次結構 - 我直接要求所有孩子在層次結構中的某個位置擁有「父」。我認爲'某處'使用'require'和控制器的屬性與'$ parent'有不同的解決方案。有了'require',我可以在'parent'和'child'元素之間有其他幾個範圍,所有東西都可以工作。 –

相關問題