当试图将指令相互嵌套或者说得更好时,我的思想融化:在另一个指令的定义内重新使用现有指令。在指令定义中的其他指令内添加指令
说我有一个现有的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毫秒的延迟很容易解决。 –