La Fermeture De Twitter Bootstrap Modal Angulaires Contrôleur
J'ai une fenêtre modale que j'utilise pour présenter un formulaire pour les utilisateurs. Ils saisissez les informations, puis appuyez sur un bouton de la a un ng-click. Le serveur traite la demande et renvoie une réponse. Lorsque la réponse est un succès, je veux fermer la fenêtre modale à partir du contrôleur. Comment cela peut-il être atteint?
Le modal est une partielle inclus dans une autre page
La page principale:
<!-- main content -->
<p>Foo</p>
<!-- angular directive -->
<foo-directive></foo-directive>
Du contenu de la directive:
<div ng-controller="FooCtrl">
<ul class="thumbnails">
<li class="span3 tile tile-white" ng-repeat="foo in model.foo">
<div>
{{foo.bar}}
</div>
<div>
({{foo.bam}})
</div>
<div>
<a data-toggle="modal" href="#myModal"><img src="{{foo.imgPath}}"></a>
</div>
</li>
</ul>
<!-- foo modal partial included by ejs -->
<% include foo_modal.ejs %>
</div>
Modal balisage:
<div id="fooModal" class="modal hide fade in" style="display: none; ">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>New Device</h3>
</div>
<div class="modal-body">
<h4>Foo Modal</h4>
<div ng-controller="FooCtrl">
<form name="fooFrm">
<input id="email" type="email" class="input-medium" ng-model="fooEmail"
placeholder="Email">
<button class="btn btn-primary btn-small"
ng-click="doFoo({email:fooEmail})">Email Link</button>
</form>
</div>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
</div>
</div>
Contrôleur de code:
functionFooCtrl($scope, FooService) {
$scope.doFoo= function (email) {
FooService.save({email:email.fooEmail}) {
alert('Request successful');
//TODO close Twitter bootstrap modal named fooModal here
},
function (err) {
alert('Your request bonked, sorry');
//TODO close twitter bootstrap modal named fooModal here
});
}
};
Quelle est la bonne façon de fermer la modale du contrôleur, dans le succès et les fonctions d'erreur?
Merci d'avance,
- Pourriez-vous veuillez donner le code de votre
FooService
? Merci beaucoup à l'avance ... - Veuillez envisager de passer votre réponse afin que je puisse retirer le mien. Je suis fatigué d'avoir downvote notifications. 🙂
Vous devez vous connecter pour publier un commentaire.
Avez-vous regardé angular-ui bootstrap? Il y a un Dialogue de l'interface utilisateur.bootstrap.boîte de dialogue) de la directive qui fonctionne très bien. Vous pouvez fermer la boîte de dialogue lors de l'appel de retour à l'angulaire (par l'exemple):
Mise à jour:
La directive a depuis été renommé Modal.
Nous pouvons obtenir le même sans l'aide d'angular-ui. Cela peut être fait en utilisant angulaire directives.
D'abord ajouter la directive de l'modal.
Créer un nouveau angulaire de la directive:
Maintenant de la rejeter() la méthode à partir de votre contrôleur.
Je suis toujours dans mes premiers jours avec angular js. Je sais que nous ne devraient pas manipuler le DOM à l'intérieur de l'contrôleurs. J'ai donc la manipulation du DOM dans la directive. Je ne suis pas sûr si c'est aussi mauvais. Si j'ai une meilleure solution, je vais le poster ici.
La chose importante à noter est que nous ne pouvons tout simplement pas utiliser ng-hide ou ng-show à la vue pour afficher ou masquer le modal. Que cache simplement le modal et non modale de toile de fond. Nous devons appeler le modal() méthode d'instance à supprimer complètement le modal.
jquery.js
etbootstrap-modal.js
doivent être chargées avantangular.js
sinon l'élément de l'objet n'aura pas lemodal()
fonction.scope.dismiss()
danslink
, je ne pense pas que nous pouvons utiliser à partir d'unseparate controller
. J'ai essayé ta solution et ça ne fonctionne pas. Appeler à partir de laview
- par exempleng-click="dismiss();"
œuvres, cependant, de le prendre pour un autrecontroller
même si lecontroller
couvre ladirective
ne fonctionne pas.$(element).modal
à l'intérieur du contrôleur. Ne devrait-ce pas être fait dans le serviceVous pouvez le faire comme ceci:
Voici une réutilisables Angulaire de la directive qui permettra de masquer et d'afficher un Bootstrap modal.
Exemple d'utilisation #1 - ce qui suppose que vous voulez montrer le modal - vous pouvez ajouter ng-si une condition
Exemple d'utilisation #2 - c'est une Angulaires expression modale-attribut visible
Un autre Exemple de démonstration le contrôleur d'interaction, vous pouvez ajouter quelque chose comme ceci à votre contrôleur pour afficher le modal après 2 secondes, puis le cacher au bout de 5 secondes.
Je suis en retard pour contribuer à cette question - créé cette directive pour une autre question. Simple Angulaire de la Directive Modal Bootstrap
Espère que cette aide.
Vous pouvez ajouter de la data-dismiss="modal" de votre bouton attributs qui appellent angularjs fonction.
Tels que;
J'ai remixé la réponse par @isubuz et cette réponse par @Umur Kontacı sur l'attribut directives dans une version où votre contrôleur ne pas appeler un DOM-comme l'opération comme "rejeter", mais essaie d'être plus MVVM style, la définition d'une propriété booléenne
isInEditMode
. La vue à son tour les liens de ce peu d'info à l'attribut de la directive qui s'ouvre/ferme le fichier de bootstrap modal.JS:
HTML:
juste mis en modal 'fermer le bouton' id que j'ai mis btnClose, pour la fermeture modal angulaire, vous avez juste à feu que le bouton fermer cliquez sur l'événement que je n'ai $('#btnClose').cliquez sur()
Vous pouvez le faire avec un simple code jquery.