2016-04-05 40 views
1

我在Angular中有一個問題,我有一個函數在我的控制器中聲明,我想要一個指令能夠調用這個函數。我在指令範圍中使用&來引用父函數。角度調用父函數與指令兩個級別的參數深

當第一個指令內有另一個指令並且內部指令也在控制器中引用這個函數時,就會出現問題。

該函數可以從第一個指令和第二個指令中調用(如果該函數沒有參數)。該函數可以從第一個指令調用,而不是從第二個指令調用(如果函數有參數)。

這plnkr表明它在行動:

https://plnkr.co/edit/8E5oNvWcF0QQWL7pmxrD?p=preview

這是bug還是我失去了一些東西?

回答

3
<directive-two increment="increment()" add="add({amount : amount})"></directive-two> 

https://plnkr.co/edit/WvVcNIOJ8zKvFmchOQ5R?p=preview

+0

它的工作原理!我沒有理解爲什麼你必須在JSON中聲明參數時,將函數的引用傳遞給範圍(從directiveOne到directiveTwo)。它看起來很冗長,如果你有一個有兩個以上參數的方法,HTML會變得非常混亂。 – ibanore

0

如果你路過,你有多種選擇的功能,我建議你檢查本文http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-3-isolate-scope-and-function-parameters

我用我最喜歡的選項更新您的plnkr,存儲功能的參考並調用它,首先必須參考指令上的功能,而不在函數名稱後面添加括號,如下所示:

<directive-one increment="increment" add="add"></directive-one> 

然後,你可以調用這樣的功能:

'<button ng-click="increment()()">Increment</button>' + 
'<button ng-click="add()(5)">Add</button>' + 

我喜歡這個選項在發送JSON對象,我認爲這是清潔工。 https://plnkr.co/edit/Y3OJpMfcp5R05a8uk1av?p=preview