假设我正在自定义angularjs引导程序转盘并将其作为指令。我想自定义ng单击在每个左/右箭头上调用的当前函数,以便它在引导程序中定义的原始函数之前调用一个自定义函数。我知道可以在点击中调用多个函数
ng-click = "customFunction();originalFunctionFromBootstrap()"
但是,在angular carousel中,左右箭头是在其引导模板中定义的,我不想使用$templatecache修改模板。有没有一种方法可以在我的控制器中添加新的ng点击,而不必修改模板缓存?
编辑:我目前可以使用的解决方法是使用
document.querySelector('.left.carousel-control').addEventListener('click', function(){...})
当然,这不是一种棱角分明的方式。另外,如果我从ng触摸使用ng点击,这将不会被调用。有没有办法修改ng点击?
如果继承指令的作用域,则可以将库函数保存在变量中,并用逻辑覆盖该函数。然后调用保存在变量上的函数,这样一切都可以继续工作。
var _superClickMethod = scope.originalFunctionFromBootstrap;
scope.originalFunctionFromBootstrap = function () {
// custom logic
_superClickMethod();
}
另一个解决方案是将carrusel引导插件封装在您的指令中。我推荐最后一种选择。
我最终做的是:
document.querySelector('.left.carousel-control').setAttribute('ng-click', 'customFunction()');
$compile(document.querySelector('.left.carousel-control'))(scope);
这解决了我的问题。