我正在尝试将函数从控制器传递给指令,因此从指令触发的事件可能会导致在不同的控制器中刷新。
controllers.controller('UserCtrl', function ($scope) {
$scope.name="Name";
$scope.test = function (t) {
console.log("Inside "+t+" "+$scope.name)
return $scope.test2();
};
$scope.test2 = function(){
return 2;
}
}
<my-test-directive respond="test">
这似乎工作正常但是当我更改它以尝试匹配Google Angular conventions时,我在返回this.test2();
时收到一个未定义的错误。这是一个带有失败版本的plunker。
使用“Google Angular样式”我将如何处理?
答案 0 :(得分:2)
当您在javascript中传递函数时,函数的上下文会丢失,因此this
键盘不再起作用。如果要传递测试函数,则需要将其包装在绑定到userCtrl的函数中。您可以通过将以下行添加到控制器的构造函数并将bind()
传递到您的指令而不是boundTest
test
执行此操作
this.boundTest = this.test.bind(this);
请注意,bind()
已在ES5中引入,因此无法在IE8中使用
这是一个有效的工作人员http://plnkr.co/edit/BTuwTFf2XsmrR3As4x1x?p=preview
答案 1 :(得分:2)
请参见此处:http://plnkr.co/edit/Mugs2C7UOjlXx1L3LsMP?p=preview
你需要改变一些事情:
respond="userController.test"
至respond="userController.test(msg)"
scope.respond("So I should be getting inside");
的函数instad到scope.respond({msg:"So I should be getting inside"})
我希望这会有所帮助。
答案 2 :(得分:0)
感谢抢夺这个想法,我不知道我喜欢这个,但有两个原因......
1。)我似乎无法使用原型,限制我的继承选项(据我所知) 2.)这看起来相当hacky
$scope.userController.test2();
根据投票数量和评论将取决于我标记的答案,所以请提供反馈