我在另一个指令中有一个指令。外部指令与控制器共享其范围,而内部指令具有自己的范围。我想将对控制器函数的引用传递给内部指令,以便可以从那里调用它。但我无法弄清楚如何将函数及其参数传递给内部指令,以便正确调用控制器的函数。
以下是planker来说明我的问题。
如果您点击“Dir 2 Click me”,警报会显示参数未定义。
答案 0 :(得分:3)
您可以使用'='
传入外部控制器方法并相应地调整代码......
angular.module('app', [])
.controller('ctrl', function($scope){
$scope.myCtrlMethod = function(msg, b) {
alert(msg + ' and b='+b);
};
})
.directive('dir1', [function(){
return {
restrict: 'E',
replace: true,
template: '<div><p ng-click="myDir1Method(\'my dir1 method\',\'b\')">Dir 1 Click me</p><dir2 my-ctrl-method="myCtrlMethod"></dir2></div>',
link: function(scope, elem, attrs){
scope.myDir1Method = function(msg,b){
scope.myCtrlMethod(msg, b);
};
}
};
}])
.directive('dir2', [function(){
return {
restrict: 'E',
scope: {
myCtrlMethod: '='
},
replace: true,
template: '<p ng-click="myDir2Method(\'my dir2 method\',\'b\')">Dir 2 Click me</p>',
link: function(scope, elem, attrs){
scope.myDir2Method = function(msg,b){
scope.myCtrlMethod(msg, b);
};
}
};
}]);
Plunker:http://plnkr.co/edit/xbSNXaSmzWa3G1GSH6Af?p=preview
编辑:'='
计算父作用域上下文中的表达式,其结果绑定到内部作用域上的属性。在此示例中,将针对父作用域计算“myCtrlMethod”,父作用域从父作用域(函数)返回myCtrlMethod
。此函数绑定到内部作用域上的myCtrlMethod
,可以使用scope.myCtrlMethod(msg, b)
调用。
答案 1 :(得分:2)
您可以使用控制器作为指令的参考
请参阅:http://jsbin.com/vayij/1/edit
directive('sonDirective', function(){
return {
restrict: 'E'
scope: {},
replace: true,
template: '<div....'
controller: 'MainController' //controller as a reference
}
})
答案 2 :(得分:0)
只需将控制器放在范围内:$scope.$b=this;