Je veux que l'utilisateur clique sur le bouton Soumettre et le modal se ferme automatiquement.
Si j'ajoute data-dismiss="modal"
Dans Submit <button>
, Il ne s'exécutera pas submitComments()
.
J'ai essayé de faire quelque chose comme $('#myModal').modal('hide');
, mais sans y parvenir.
Alors, comment puis-je fermer un modal dans Angular 2? Merci
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#myModal">Open Modal</button>
<div id="myModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<form (ngSubmit)="submitComments()">
<div class="form-group row">
<label class="form-control-label col-sm-2">Comments:</label>
<div class="col-sm-10">
<textarea class="form-control" rows="3"></textarea>
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
.
submitComments() {
// I want to do something like $('#myModal').modal('hide'); here.
}
Outre la réponse de @ MattScarpino, une autre alternative consiste à changer le type de votre bouton en button
à partir de submit
et à appeler votre fonction submitComments()
tout en appelant dismiss-modal
. en faisant cela, vous êtes en mesure de rejeter modal et d’appeler fonction en même temps, en espérant que cela puisse vous aider. voici l'exemple:
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#myModal">Open Modal</button>
<div id="myModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<form>
<div class="form-group row">
<label class="form-control-label col-sm-2">Comments:</label>
<div class="col-sm-10">
<textarea class="form-control" rows="3"></textarea>
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10">
<button type="button" (click)='submitComments()' data-dismiss="myModal" class="btn btn-default">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
si vous souhaitez fermer modal du côté de votre contrôleur, vous pouvez utiliser cette méthode
$("#myModal").modal("hide");
Vous pouvez le faire en déclarant simplement la variable jQuery avec n’importe quel type dans le contrôleur Angular2.
declare var jQuery:any;
Ajoutez ceci juste après les instructions d'importation et avant le décorateur de composants.
Ensuite, accédez à bootstrap modal avec son identifiant identique à celui-ci).
jQuery("#myModal").modal("hide");
Utilisation de @ViewChild
ajouter #closeBtn
à l'élément avec data-dismiss="modal"
<a><i class="fa fa-close" data-dismiss="modal" #closeBtn></i></a>
<div class="modal fade" id="yourModalId">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<a><i class="fa fa-close" data-dismiss="modal" #closeBtn></i></a>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
utiliser this.closeBtn.nativeElement.click();
pour déclencher l'événement clic fermera votre modal.
import {ViewChild, ElementRef} from '@angular/core';
@Component({
moduleId: ...,
selector: '.',
templateUrl: '.',
styleUrls: ['.']
})
export class yourClass {
@ViewChild('closeBtn') closeBtn: ElementRef;
yourFunction() {
//do something
...
...
//close your modal
this.closeModal();
}
//call this wherever you want to close modal
private closeModal(): void {
this.closeBtn.nativeElement.click();
}
}
Tout d'abord, définissez la propriété hidden
du div sur une variable:
<div id="myModal" [hidden]="hideModal" class="modal fade">
Deuxièmement, dans la classe, définissez un booléen nommé hideModal
et définissez-le sur false:
hideModal: boolean = false;
Troisièmement, dans submitComments()
, définissez hideModal
sur true.
Réponse parfaite dans cet univers .........................
étape 1: donnez un identifiant unique au bouton de renvoi de modal
étape 2: après la soumission du formulaire ou l'appel de la tâche terminée
document.getElementById("addProductCloseButton").click();
dans votre classe
j'utilise une des réponses et avec quelques modifications de son travail parfaitement pour moi, j'espère que cela peut aider pour essayer de changer "your modal" en nom modal qui est votre cible, vous devriez utiliser le bouton Au lieu de i
<button hidden="hidden" class="fa fa-close" data-dismiss="modal" id="closeBtn" #closeBtn (click)="yourModal.close()"></button>
<div style="margin-top: 0px !important;">
<button type="button" id="openModal" #openModal class="btn btn-fab-mini btn-outline-primary" style="float:right" (click)="yourModal.open()"><strong>click here to open modal</strong></button>
<modal #yourModal>
<ng-template #modalHeader>
<button hidden="hidden" class="fa fa-close" data-dismiss="modal" id="closeBtn" #closeBtn (click)="yourModal.close()"></button>
</ng-template>
<ng-template #modalBody>
<yourmodalSelectorname></yourmodalSelectorname>
</ng-template>
<ng-template #modalFooter></ng-template>
</modal>
</div>
import {ViewChild, ElementRef} from '@angular/core';
@Component({
moduleId: ...,
selector: '.',
templateUrl: '.',
styleUrls: ['.']})
yourFunction() {
//do something
...
...
//close your modal
this.closeModal();
}
//call this wherever you want to close modal
private closeModal(): void {
this.closeBtn.nativeElement.click();
}
Essayez de ne pas inclure le formulaire dans votre corps modal. Ajoutez plutôt deux boutons identiques dans la section de pied de page.
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<label class="form-control-label col-sm-2">Comments:</label>
<div class="col-sm-10">
<textarea class="form-control" rows="3"></textarea>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Close</button>
<button type="submit" class="btn btn-primary" >Save changes</button>
</div>
</div>
</div>
</div>
Je l'ai fait comme ça et ça marche parfaitement pour moi.
var element = document.getElementById("CloseButton") as any;
element.click();
Où mon CloseButton
est bootstrap).