Wie kann man das Verhalten einer Direktive mit isoliertem Geltungsbereich offenlegen?

Wie kann ich eine Methode aus einer Direktive herausstellen? Ich weiß, dass ich Attribute für Daten verwenden sollte, aber ich möchte wirklich verfügbar machenVerhaltennichtDaten. Etwas, das der übergeordnete Controller aufrufen kann.

Angenommen, mein DOM sieht folgendermaßen aus:

<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/

Wenn dasscope auskommentiert ist (d. h. die Richtlinie hat keinen isolierten Geltungsbereich), funktioniert es einwandfrei. Wenn ich die Taste drücke,myfn wird aufgerufen und meldet sich an der Konsole an.

Sobald ich das Kommentarzeichen entfernescopefunktioniert es nichtmyfn wird nach untergeordnetem Bereich definiert und ist für die Eltern nicht leicht verfügbar.

In meinem Fall halte ich die Verschmutzung des übergeordneten Bereichs für eine schlechte Idee und möchte sie unbedingt vermeiden.

Wie kann ich also eine Funktion aus der Direktive für den übergeordneten Controller verfügbar machen? Oder: Wie kann ich eine Methode für Direktiven vom übergeordneten Controller aus aufrufen?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage