因此,在頁面上我有3個角度自定義指令AA BB和CC。 有時候BB裏面AA如何檢測指令B是否在指令A
<AA>
<BB></BB>
</AA>
其他一些時間BB裏面CC
<CC>
<BB></BB>
</CC>
它認爲像
1)我的預覽觀衆
2)我裏面顯示BB m在某種儀表板上顯示BB
如果BB在指令AA或CC內部,我想要檢測BB的控制器內部。 我可以檢查URL($位置)的路徑 - 但也許有另一種方式?
因此,在頁面上我有3個角度自定義指令AA BB和CC。 有時候BB裏面AA如何檢測指令B是否在指令A
<AA>
<BB></BB>
</AA>
其他一些時間BB裏面CC
<CC>
<BB></BB>
</CC>
它認爲像
1)我的預覽觀衆
2)我裏面顯示BB m在某種儀表板上顯示BB
如果BB在指令AA或CC內部,我想要檢測BB的控制器內部。 我可以檢查URL($位置)的路徑 - 但也許有另一種方式?
好吧,擴大對我的評論,如果您在指令中使用require您可以在指令名稱的數組傳遞,如果這些被設置爲可選的,它不會拋出,如果出現錯誤找不到所需的指令。相反,它只會在控制器數組中返回undefined。通過在?
之前加上指令名稱來完成將所需控制器設置爲可選。插入符號^
通過搜索元素及其父項來指示它找到所需的控制器。從1.3開始,您甚至可以使用^^
來嘗試通過僅搜索元素的父元素來找到所需的控制器(因此在這個元素中,您不能在同一元素上同時具有這兩個指令)。
因此,你可以這樣做:
app.directive('BB', function() {
return {
require: ['?^AA','?CC'],
link: function(scope, element, attrs, controllers) {
parent = controllers[0] ? 'AA' : 'CC';
alert(parent);
}
}
嗨,不錯,我認爲可選的要求可以爲我工作。 – szydan
如果它是您自己的指令,您可以在範圍上附加屬性。從子指令中,如果它不是隔離範圍,則可以遍歷範圍鏈並確定該屬性是否存在。
或者,您將DOM向上走到body元素,並檢查指令元素。
例子也將會很快跟進......
使用在你的指令聲明的返回值require
關鍵。
require: '^myTabs',
這裏是例如,從AngularJS網站:
app.directive('myPane', function() {
return {
require: '^myTabs'
}
http://plnkr.co/edit/KR9bgWesS8pl8Qq06aJq?p=preview
還有一篇文章,解釋這個指令通信。
https://thinkster.io/a-better-way-to-learn-angularjs/directive-to-directive-communication
你能解釋一下爲什麼你需要知道這一點?它是如何影響你想要完成的?如果您嘗試訪問父指令,那麼您可以使用require將數組設置爲AA和CC爲可選的數組。我只是想弄清楚如何最好地給你一個答案。 – jme11