Как я могу выставить метод из директивы? Я знаю, что я должен использовать атрибуты для данных, но я действительно хочу разоблачить поведение, а не данные. То, что может вызвать родительский контроллер.
Скажем, мой 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
определяется по охвату пользователя и недоступен для родителя.
В моем случае я считаю, что загрязнение родительской области - плохая идея, и я действительно хотел бы избежать ее.
Итак, как я могу выставить функцию из директивы в родительский контроллер? Или: Как я могу вызвать метод для директивы родительского контроллера?