如何从指令中公开方法?我知道我应该对数据使用属性,但我真的想公开行为,而不是数据。父控制器可以调用的东西。
假设我的 DOM 看起来像:
<div ng-app="main">
<div ng-controller="MyCtrl">
<button ng-click="call()" >Call</button>
<div id="container" my-directive> </div>
</div>
</div>
JavaScript:
angular.module("main", []).controller("MyCtrl", function($scope) {
$scope.call = function() {
$scope.myfn();
};
}).directive("myDirective", function() {
return {
// scope: {},
controller: function($scope) {
$scope.myfn = function() {
console.log("myfn called");
}
}
};
});
jsFiddle:http: //jsfiddle.net/5gDjQ/7/
如果scope
注释掉了(即指令没有孤立的范围),它就可以正常工作。当我按下按钮时,myfn
会调用并记录到控制台。
一旦我取消注释scope
,它就不起作用。myfn
是在子范围内定义的,父级不容易使用。
就我而言,我认为污染父范围是一个坏主意,我真的很想避免它。
那么,如何将指令中的函数公开给父控制器?或者:如何从父控制器调用指令上的方法?