Je n'arrive pas à trouver un moyen d'appeler une fonction sur la portée parent à partir d'une directive sans utiliser la portée isolée. Je sais que si j'utilise une portée isolée, je peux simplement utiliser "&" dans la portée isolée pour accéder à la fonction sur la portée parente, mais l'utilisation de la portée isolée quand ce n'est pas nécessaire a des conséquences. Considérez le code HTML suivant:
<button ng-hide="hideButton()" confirm="Are you sure?" confirm-action="doIt()">Do It</button>
Dans cet exemple simple, je veux afficher une boîte de dialogue de confirmation JavaScript et n'appeler doIt () que s'ils cliquent sur "OK" dans la boîte de dialogue de confirmation. C'est simple en utilisant une portée isolée. La directive ressemblerait à ceci:
.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();
}
});
}
};
})
Mais le problème est que, parce que j'utilise une portée isolée, ng-hide dans l'exemple ci-dessus ne s'exécute plus contre la portée parente , mais plutôt dans la portée isolée (car l'utilisation d'une portée isolée sur n'importe quelle directive entraîne toutes les directives sur cet élément à utilisez la portée isolée). Voici un jsFiddle de l'exemple ci-dessus où ng-hide ne fonctionne pas. (Notez que dans ce violon, le bouton doit se cacher lorsque vous tapez "oui" dans la zone de saisie.)
L'alternative serait de NE PAS utiliser un champ d'application isolé , ce que je souhaite vraiment ici, car il n'est pas nécessaire que le champ d'application de cette directive soit isolé. Le seul problème que j'ai est, comment appeler une méthode sur la portée parent si je ne la transmets pas sur une portée isolée ?
Voici un jsfiddle où je n'utilise PAS de portée isolée et le ng-hide fonctionne bien, mais, bien sûr, l'appel à confirmAction () ne fonctionne pas, et je ne sais pas comment le faire fonctionner.
Veuillez noter que la réponse que je recherche vraiment est de savoir comment appeler des fonctions sur la portée externe SANS utiliser une portée isolée. Et je ne suis pas intéressé à faire fonctionner ce dialogue de confirmation d'une autre manière, car le but de cette question est de comprendre comment faire des appels à la portée externe et toujours pouvoir faire fonctionner d'autres directives contre la portée parente.
Sinon, je serais intéressé d'entendre des solutions qui utilisent une portée isolée si d'autres directives fonctionnent toujours contre la portée parente , mais je ne pense pas que cela soit possible.