只是想用一个解决方案来更新它:这是 Plunk - http://plnkr.co/edit/m2YKLGGLv88jNkkgAYPp?p=preview
基本上,我使用数组中的范围变量从上面的 CodeZilla 扩展了解决方案。
$scope.func = [];
然后在指令属性functionname中传递要调用的函数的名称。
<div mydir name="dir1" functionname="sayhello1">Directive dir1</div>
然后将从指令中调用的函数添加到控制器中:
$scope.callDir1 = function (){
$scope.func['sayhello1']();
}
$scope.callDir2 = function (){
$scope.func['sayhello2']();
}
在指令本身中,我们使用 compile 在指令中创建将从控制器调用的函数。
app.directive('mydir', function () {
return {
scope: true,
compile: function (tElement, tAttrs, transclude) {
return function postLink(scope, iElement, iAttrs, controller) {
scope.$parent.func[iAttrs.functionname] = function (){
alert("update something in " + iAttrs.name);
}
}
}
}
});
或者,您可以使用链接功能 - 它的工作原理相同:
app.directive('mydir', function () {
return {
scope: true,
link: function (scope, element, attrs) {
scope.$parent.func[attrs.functionname] = function () {
console.debug("update something in " + attrs.name);
}
}
}
});
而已。