當試圖將指令相互嵌套或者說得更好時,我的思想融化:在另一個指令的定義內重新使用現有指令。在指令定義中的其他指令內添加指令
說我有一個現有的HTML標記是這樣的:
<a class="class1 class2" href="#link1" data-important="data1">Test</a>
我現在想新的功能與自定義指令myDirective
添加到此現有的標記:
<a class="class1 class2" href="#link1" data-important="data1" my-directive>Test</a>
沒關係什麼myDirective
這樣做,但我想重新使用ngClick
功能。通常我會用新模板替換標記,但事先並不知道所有類,屬性等。我真正需要的是一種方式追加ngClick
。我想這樣的事情,但它沒有工作:
// inside myDirective
compile: function (element, attrs) {
element.attr('ng-click', 'customFunction()');
}
所以我現在這樣做:
// inside myDirective
link: function(scope, element, attrs, someCtrl) {
element.bind('click', function() {
someCtrl.customFunction();
scope.$apply();
});
}
這工作,但
- 我需要調用
scope.$apply();
- 這是好吧以這種方式效仿
ngClick
,但我不能重複使用更復雜的指令。
任何幫助?
我標記@kamilkp答案作爲接受的答案,因爲我認爲這在技術上是我的問題的正確答案。不過,你對我的情況提出了一些有效的觀點。那麼你會推薦做什麼呢?我應該堅持我的「鏈接」功能嗎? 也許是重新使用'ngClick'的情況:如果我在項目中放置了'ngTouch',它會用增強的行爲來替代'ngClick'。這不適用於一個簡單的'element.bind('click''。或者我錯了嗎? – Pipo
是的,它會工作得很好,除了在某些設備上有一個300毫秒的延遲很容易解決。 –