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 la portée isolée, je peux simplement utiliser "&" dans la portée isolée pour accéder à la fonction de la portée parente, mais l'utilisation de la portée isolée lorsqu'elle n'est pas nécessaire a des conséquences. Considérons le 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 si l'utilisateur clique sur "OK" dans la boîte de dialogue de confirmation. Ceci 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 par rapport à la portée parent. mais plutôt dans la portée isolée (puisque l'utilisation d'une portée isolée sur une directive entraîne l'utilisation de la portée isolée par toutes les directives de cet élément). Voici un jsFiddle de l'exemple ci-dessus où le ng-hide ne fonctionne pas. (Notez que dans ce bidule, le bouton doit se cacher lorsque vous tapez "oui" dans la zone de saisie).
L'alternative serait de NE PAS utiliser une lunette isolée Ce qui est en fait ce que je veux ici, car il n'y a pas besoin d'isoler la portée de cette directive. Le seul problème que j'ai est le suivant, comment appeler une méthode dans la portée parent si je ne la passe pas dans 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 cherche 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é par le fait de faire fonctionner cette boîte de dialogue de confirmation d'une autre manière, parce que le but de cette question est de comprendre comment faire des appels à l'étendue externe et être toujours capable de faire fonctionner d'autres directives sur l'étendue parent.
Sinon, je serais intéressé de connaître les solutions qui utilisent une portée isolée si les autres directives fonctionnent toujours par rapport à la portée parente. mais je ne pense pas que ce soit possible.