Ich entwickle eine Direktive, die den Inhalt basierend auf einem in der Vorlage definierten Klickereignis (ng-click) anzeigt und versteckt. Bei einigen Ansichten, in denen die Direktive verwendet wird, möchte ich wissen, ob die Direktive den Inhalt anzeigt oder versteckt, damit ich auf die DOM-Änderungen reagieren kann. Die Richtlinie hat einen isolierten Geltungsbereich und ich versuche, den übergeordneten Bereich zu informieren, wenn die Richtlinie "umgeschaltet" wurde. Ich versuche, dies zu erreichen, indem ich eine Callback-Funktion an die Direktive übergebe, die aufgerufen werden kann, wenn sich der Status der Direktive ändert, dh ob sie ausgeblendet ist oder nicht der Direktive (versteckt oder gezeigt) wird im isolierten Bereich der Direktive gespeichert und nach dem ng-Klick bestimmt. Daher muss ich die Funktion des übergeordneten Bereichs innerhalb der Direktive aufrufen und nicht die Sicht übernehmen.Aufruf der Funktion für den übergeordneten Bereich der Direktive mit dem Argument für den Direktivenbereich
Dies wird WAAY mit einem Beispiel sinnvoller machen. Hier ist ein plunked zeigen, was ich tun möchte:
http://plnkr.co/edit/hHwwxjssOKiphTSO1VIS?p=info
var app = angular.module('main-module',[])
app.controller('MainController', function($scope){
$scope.myValue = 'test value';
$scope.parentToggle = function(value){
$scope.myValue = value;
};
});
app.directive('toggle', function(){
return {
restrict: 'A',
template: '<a ng-click="toggle();">Click Me</a>',
replace: true,
scope: {
OnToggle: '&'
},
link: function($scope, elem, attrs, controller) {
$scope.toggleValue = false;
$scope.toggle = function() {
$scope.toggleValue = !$scope.toggleValue;
$scope.OnToggle($scope.toggleValue)
};
}
};
});
Ich bin relativ neu in Angular. Ist das eine schlechte Idee? Sollte ich einen Service oder etwas verwenden, anstatt Funktion Refs herumzugeben?
Danke!
Das ist, was ich brauchte. Danke mein Herr. – Nick
@Nick Ich habe etwas tiefer gegraben und eine Alternative hinzugefügt mit '&' um die Funktion des Root Scope zu binden. Vielleicht ist das mehr * Angularish *. – Sebastian
Ihr Plummer tut genau das, was ich versuche zu tun, aber ich habe Probleme, es in meinen Code zu portieren.Gibt es einen Grund, warum es für eine Richtlinie vom Typ Element nicht funktionieren würde? Oder muss ich etwas anders machen? – stranger