2015-07-04 83 views
0

因此,在頁面上我有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($位置)的路徑 - 但也許有另一種方式?

+1

你能解釋一下爲什麼你需要知道這一點?它是如何影響你想要完成的?如果您嘗試訪問父指令,那麼您可以使用require將數組設置爲AA和CC爲可選的數組。我只是想弄清楚如何最好地給你一個答案。 – jme11

回答

0

好吧,擴大對我的評論,如果您在指令中使用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); 
    } 
} 
+0

嗨,不錯,我認爲可選的要求可以爲我工作。 – szydan

0

如果它是您自己的指令,您可以在範圍上附加屬性。從子指令中,如果它不是隔離範圍,則可以遍歷範圍鏈並確定該屬性是否存在。

或者,您將DOM向上走到body元素,並檢查指令元素。

例子也將會很快跟進......