2016-03-30 1 views
0

J'ai un problème avec ngDialog (https://github.com/likeastore/ngDialog), j'ai 1 boîte de dialogue ouverte et lorsque l'utilisateur clique sur un bouton, il affiche un autre modal en haut comme une alerte. Je veux fermer la boîte de dialogue d'alerte via un bouton mais quand j'utilise ngDialog.close() ferme tous les modals actifs.ngDialog ferme tous les modaux actifs

Je me rends compte que les documents indiquent que si vous ne passez pas un identifiant, il agit comme closeAll(), donc je dois lui donner un identifiant. Donc, quand j'utilise ngDialog.open() je lui donne un identifiant d'alerte puis j'utilise ngDialog.close ("alert"), mais cela ferme quand même tous les modaux ....

J'ai créé un plunker pour essayer de montrer ce que je fais et il agit de la même façon ... http://plnkr.co/0bg1VB7QuEZxIdakfoBr

scope.closeThisDialog = function() { 
    ngDialog.close("secondDialog"); 
}; 

Si vous inspectez à la source, il montre aussi que l'identifiant n'apparaît pas non plus, je pense que c'est pourquoi les deux les modals se ferment encore.

Quelqu'un peut-il faire la lumière sur ce que je fais de mal.

Répondre

0

Vous ne devez pas écraser la méthode closeThisDialog. La documentation dit que ".closeThisDialog (value) méthode est injectée à $ scope.", Puisque votre directive a son propre "scople", vous devriez pouvoir trouver la méthode injectée depuis la portée parent. Donc, votre méthode devrait être changée comme ci-dessous.

scope.closeThisDialog = function() { 
    //ngDialog.close("secondDialog"); 
    scope.$parent.closeThisDialog(); 
    }; 

http://plnkr.co/edit/t7xVrsGfq7YtWxbGbwn6?p=preview

+0

Je n'avais pas l'intention d'écraser la méthode closeThisDialog, c'était juste ma mauvaise méthode de nommage, je l'ai changé pour finir. L'idée à l'origine de mon code est que toutes les directives sont autonomes. Par conséquent, l'utilisation de $ parent casse cela en forçant ma directive à connaître son parent. – Ben

+0

Pour moi, un dialogue doit être dans un certain contexte, de sorte qu'il n'est pas vraiment autonome. ou vous pouvez le faire, si (scope.closeThisDialog) scope.closeThisDialog(); autre portée. $ parent.closeThisDialog(); – sdfacre

0

j'eu le temps de ne pas être en mesure d'obtenir l'identifiant de dialogues en le faisant passer si le champ d'application et de mettre sur ma directive

scope.openProfileDialog = function() { 
    var profileDialogScope = scope.$new(); 
    profileDialogScope.customerNumber = scope.customerNumber; 

    var profileDialog = ngDialog.open({ 
     plain: true, 
     template: "<profile-dialog customer-number='{{ customerNumber }}' dialog-id='{{dialogId}}'></profile-dialog>", 
     closeByDocument : false, 
     name: "profileDialog", 
     scope: profileDialogScope, 
     id: "profileDialog" 
    }); 

    profileDialogScope.dialogId = profileDialog.id; 
}; 

Puis, dans la directive profil-dialogue I ont

scope: { 
    customerNumber : "@", 
    dialogId: "@" 
}, 

et ceci est dans la section de lien

scope.finish = function() { 
    ngDialog.close(scope.dialogId); 
};