Angular:在一个指令链接函数中调用控制器函数,使用&

我们遇到了一个问题,试图在我们的指令的链接函数中使用和号“&”来调用一个传入指令的函数。

看来这个函数在控制器上被调用,但是在调用中没有parameter passing。 我们所看到的所有例子都是通过在模板中创build呼叫来实现的。 有没有办法从你的指令模板上调用函数,然后在调用控制器函数的指令中做一些事情?

你是否在{} s中传递参数? 例如,在指令的链接函数中,你需要像这样调用方法: scope.someCtrlFn({arg1: someValue});

 <div my-directive callback-fn="ctrlFn(arg1)"></div> 
 app.directive('myDirective', function() { return { scope: { someCtrlFn: '&callbackFn' }, link: function(scope, element, attrs) { scope.someCtrlFn({arg1: 22}); }, } }); function MyCtrl($scope) { $scope.ctrlFn = function(test) { console.log(test); } } 

小提琴 。

除了马克的回答之外,我想指出,你可以用&速记来留下一些信件。 这将假定HTML中引用的callback-fn scope.callbackFn在作用域中作为scope.callbackFn存在。 否则还是一样的,所以只有两条线要改变。 我保留马克的版本作为评论,所以你应该能够轻松地发现差异。

 <div my-directive callback-fn="ctrlFn(arg1)"></div> 
 app.directive('myDirective', function() { return { scope: { callbackFn: '&' }, //scope: { someCtrlFn: '&callbackFn' }, link: function(scope, element, attrs) { scope.callbackFn({arg1: 22}); //scope.someCtrlFn({arg1: 22}); }, } }); function MyCtrl($scope) { $scope.ctrlFn = function(test) { console.log(test); } }