Jak ujawnić zachowanie dyrektywy z pojedynczym zakresem?
Jak mogę ujawnić metodę z dyrektywy? Wiem, że powinienem używać atrybutów danych, ale naprawdę chcę je ujawnićzachowanie, niedane. Coś, co kontroler nadrzędny może wywołać.
Powiedzmy, że mój DOM wygląda tak:
<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/
Jeśliscope
jest skomentowane (tj. dyrektywa nie ma odizolowanego zakresu), działa dobrze. Po naciśnięciu przyciskumyfn
jest wywoływane i loguje się do konsoli.
Jak tylko odkomentujęscope
, to nie działa.myfn
jest zdefiniowany w zakresie podrzędnym i nie jest łatwo dostępny dla rodzica.
W moim przypadku myślę, że zanieczyszczenie macierzystego zakresu jest złym pomysłem i naprawdę chciałbym tego uniknąć.
Jak więc mogę udostępnić funkcję od dyrektywy do kontrolera nadrzędnego? Lub: Jak mogę wywołać metodę na dyrektywy od kontrolera nadrzędnego?