Javascript 如何在AngularJs中将函数处理程序从控制器传递到指令隔离范围?
我在控制器中具有以下功能:Javascript 如何在AngularJs中将函数处理程序从控制器传递到指令隔离范围?,javascript,angularjs,Javascript,Angularjs,我在控制器中具有以下功能: angular.module('app').controller('BodyController', function(){ this.click = function(message){ alert(message); } }) 我想将此函数传递到指令的隔离作用域中,用一些特定的参数调用它,如下所示: angular.module('app').directive('custom', function(){ retu
angular.module('app').controller('BodyController', function(){
this.click = function(message){
alert(message);
}
})
我想将此函数传递到指令的隔离作用域中,用一些特定的参数调用它,如下所示:
angular.module('app').directive('custom', function(){
return {
restrict: 'A',
scope: {
text: '@',
click: '&click'
},
link: function(scope, element){
//...
scope.click('Hello, Plunker!');
//...
}
}
})
我这样传递函数:
<h1 custom text="Hello Plunker!" click="ctrl.click"></h1>
以下是一个例子:
未调用该函数。我错过了什么
提前感谢通过使用
单击:'&click'
(可以缩短为只单击:'&
),您说的是“使在内部作用域上单击
,在'click'
属性中执行表达式”。这意味着您需要实际调用表达式中的方法,而不仅仅是指向它
<h1 click="ctrl.click()">...</h1>
或者只使用@michael zuchetta提供的解决方案,这对我来说是新的:)您可以执行以下操作
angular.module('app').directive('custom', function(){
return {
restrict: 'A',
scope: {
text: '@',
click: '=click'
},
link: function(scope, element){
// console.dir(scope.click);
element.bind("click",function(){
scope.click('Hello, Plunker!');
});
element.text('Hello, Plunker!');
}
}
})
在这里,您可以通过单击从父作用域获得click函数:'=单击'
并绑定该函数以单击元素
这是plnkr
或者您可以像这样将参数传递到指令中这是一个解决方案:
<h1 custom text="Hello Plunker!" click="click(message)"></h1>
这是一个工作示例:
Edit:Nevermind,打开你的plunker,不起作用。在这种情况下,我如何从指令中传递一个参数来单击函数?我已经编辑了答案以包含这一点(并删除了我关于不可能的无知评论)。
<h1 custom text="Hello Plunker!" click="click(message)"></h1>
scope.click({message: "Hello Plunker:"});