ディレクティブからメソッドを公開するにはどうすればよいですか? データに属性を使用する必要があることはわかっていますが、実際にはdataではなくbehaviorを公開したいと考えています。親コントローラーが呼び出すことができるもの。
私の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
子スコープで定義されており、親が簡単に利用できません。
私の場合、親スコープを汚染することは悪い考えであり、本当に避けたいと思います。
では、ディレクティブから親コントローラーに関数を公開するにはどうすればよいでしょうか? または: 親コントローラーからディレクティブでメソッドを呼び出すにはどうすればよいですか?