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

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

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

2 Solutions collect form web for “Angular:在一个指令链接函数中调用控制器函数,使用&”

你是否在{} 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); } } 
  • 为什么不能在具有隔离范围的指令的模板中访问$ rootScope?
  • 如何实现自定义指令的ng-change
  • 从其他控制器调用指令控制器中的方法
  • 用标准networking技术替代angular度
  • AngularJS指令dynamic模板
  • 如何操作AngularJS中的指令样式?
  • 如何autocapitalize在AngularJS的input字段中的第一个字符?
  • 如何从作为可重用组件的指令公开API?
  • 我如何使angular.js重新评估/重新编译内部的HTML?
  • 当范围被破坏时,angular度$ watch应该被移除吗?
  • 如何replaceAngularJS指令链接函数中的元素?