将回调函数绑定到指令时,对我来说,在正确的上下文中执行此函数很重要。现在,只要该指令具有隔离范围,就不会有问题

<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/

10-12 15:29