我有一个控制器函数传递给通用指令(#1)。在通用指令模板中,我有另一个特定的指令(#2),我传递了相同的控制器函数。如何将控制器函数传递给指令中的指令
问题似乎是,通用指令(#1)在接收到控制器方法时会传递控制器方法,因此不会将其正确传递到通用指令模板中的特定指令(#2)。
的jsfiddle:http://jsfiddle.net/Hgh7D/
var myApp = angular.module('myApp',[])
.controller('myctrl', ['$scope', function($scope) {
$scope.ctrlfunc = function(myvar) {
console.log(myvar);
}
}])
.directive('mydir1', function() {
return {
template: '<div mydir2 dirfunc="dirfunc"></div>',
scope: {
dirfunc: '&'
}
}
})
.directive('mydir2', function() {
return {
template: '<button ng-click="onClick()">click</button>',
scope: {
dirfunc: '&'
},
link: function(scope) {
scope.onClick = function() {
scope.dirfunc({myvar:'hello'});
}
}
}
})
如果我改变特定指令的范围内声明的功能是“=”而不是“&”它工作正常。
的jsfiddle:http://jsfiddle.net/Hgh7D/1/
.directive('mydir2', function() {
return {
template: '<button ng-click="onClick()">click</button>',
scope: {
dirfunc: '='
},
link: function(scope) {
scope.onClick = function() {
scope.dirfunc({myvar:'hello'});
}
}
}
})
但是我不想这样做,因为它可能并不总是在这个2层指令情况下使用。我希望它保持'&',因为它期待着一个功能。这可能吗?
谢谢你的反应曼尼。这是一个创造性的解决方案,我想可以添加一个循环,直到达到根链,直到找到解决多层深层问题的函数为止。不幸的是,“$ parent”不会通过代码审查在我工作的地方进行,因为它不是Angular正式记录的特性。我也会担心无意识的函数名称匹配......但仍然是一个好主意。 – revoxover