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?

questionAnswers(5)

yourAnswerToTheQuestion