Ich kann anscheinend keine Möglichkeit finden, eine Funktion für den übergeordneten Bereich innerhalb einer Direktive aufzurufen, ohne einen isolierten Bereich zu verwenden. Ich weiß, dass ich bei Verwendung eines isolierten Bereichs nur "&" im isolierten Bereich verwenden kann, um auf die Funktion im übergeordneten Bereich zuzugreifen. Die Verwendung eines isolierten Bereichs, wenn dies nicht erforderlich ist, hat jedoch Konsequenzen. Betrachten Sie den folgenden HTML-Code:
<button ng-hide="hideButton()" confirm="Are you sure?" confirm-action="doIt()">Do It</button>
In diesem einfachen Beispiel möchte ich ein JavaScript-Bestätigungsdialogfeld anzeigen und doIt () nur aufrufen, wenn sie im Bestätigungsdialogfeld auf "OK" klicken. Dies ist mit einem isolierten Bereich einfach. Die Richtlinie würde folgendermaßen aussehen:
.directive('confirm', function () {
return {
restrict: 'A',
scope: {
confirm: '@',
confirmAction: '&'
},
link: function (scope, element, attrs) {
element.bind('click', function (e) {
if (confirm(scope.confirm)) {
scope.confirmAction();
}
});
}
};
})
Das Problem ist jedoch, dass ng-hide im obigen Beispiel nicht mehr für den übergeordneten Bereich ausgeführt wird , sondern für den isolierten Bereich (da die Verwendung eines isolierten Bereichs für eine Direktive alle Anweisungen für dieses Element bewirkt , da ich einen isolierten Bereich verwende Verwenden Sie den isolierten Bereich. Hier ist eine jsFiddle des obigen Beispiels, bei der ng-hide nicht funktioniert. (Beachten Sie, dass in dieser Geige die Schaltfläche ausgeblendet sein sollte, wenn Sie "Ja" in das Eingabefeld eingeben.)
Die Alternative wäre, KEINEN isolierten Geltungsbereich zu verwenden , was ich hier eigentlich wirklich möchte, da der Geltungsbereich dieser Richtlinie nicht isoliert werden muss. Das einzige Problem, das ich habe, ist, wie ich eine Methode im übergeordneten Bereich aufrufe, wenn ich sie nicht im isolierten Bereich weitergebe .
Hier ist eine jsfiddle, bei der ich KEINEN isolierten Bereich verwende und das ng-hide einwandfrei funktioniert, aber natürlich funktioniert der Aufruf von verifyAction () nicht und ich weiß nicht, wie ich es zum Laufen bringen soll.
Bitte beachten Sie, dass die Antwort, nach der ich wirklich suche, darin besteht, Funktionen auf dem äußeren Bereich aufzurufen, OHNE einen isolierten Bereich zu verwenden. Und ich bin nicht daran interessiert, dass dieser Bestätigungsdialog auf andere Weise funktioniert, da es bei dieser Frage darum geht, herauszufinden, wie der äußere Bereich aufgerufen werden kann und dennoch andere Anweisungen gegen den übergeordneten Bereich arbeiten können.
Alternativ wäre ich interessiert, von Lösungen zu hören, die einen isolierten Bereich verwenden, wenn andere Richtlinien weiterhin gegen den übergeordneten Bereich arbeiten , aber ich denke nicht, dass dies möglich ist.