将回调函数绑定到指令时,对我来说,在正确的上下文中执行此函数很重要。现在,只要该指令具有隔离范围,就不会有问题
<bar-foo callback="mycontroller.callback()"></bar-foo>
和指令:
...
scope:{
callback: '&'
},
...
没有隔离的范围,我从$ attrs attrubute中提取回调
$scope.callback = $parse($attrs.callback)($scope);
但是,现在我做不到
<bar-foo callback="mycontroller.callback()"></bar-foo>
因为它将直接执行回调。解决此问题的首选方法是什么?
DEMO
最佳答案
首先在您的控制器中创建一个函数,该函数在此函数内部显式设置this
的值:
this.exportableCallback = this.callback.bind(this);
其中
this.callback
是用于隔离范围的一个。第二步是将其设置为属性
<hello-world callback="mycontroller.exportableCallback"></hello-world>
您不会像使用隔离范围那样调用函数。
请参见fiddle。
另一个选项(如果从控制器中删除
this.callback
)是this.exportableCallback = function() {
console.log(this.test);
}.bind(this);
如果要将参数传递给此函数:
this.exportableCallback = function() {
console.log(arguments);
}.bind(this);
关于javascript - 将回调绑定(bind)到没有隔离范围的指令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36912769/