j'utilise bootstrap 4 modal.quand j'appuie sur le bouton de fermeture, le modal se ferme correctement. mais je veux fermer le modal après avoir soumis le bouton de création présent dans le formulaire. j'utilise angular 4.
<div class="modal fade" id="createLabel" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">New project</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form name="form" (ngSubmit)="f.form.valid && newproject(createLabel)" #f="ngForm" novalidate >
<div class="form-group" [ngClass]="{ 'has-error': f.submitted && !projectname.valid }">
<input type="text" class="form-control" placeholder="Your Project Title. Eg. Building Ark v1.0" name="projectname" [(ngModel)]="createLabel.projectname" minlength="3" #projectname="ngModel" required />
<div *ngIf="f.submitted && !projectname.valid" class="help-block" style="color: red;">Atleast 3 charater</div>
</div>
<div class="form-group" >
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button [disabled]="loading" class="btn btn-primary" >Create</button> </div>
</form>
</div>
</div>
</div>
Vous n'avez pas besoin d'utiliser jQuery ou d'autres bibliothèques externes lorsque vous utilisez Angular. Tout ce dont vous avez besoin est un EventEmitter
qui émet un événement lorsque le formulaire est soumis.
Regardez cet exemple de code que j'ai fait:
D'abord le code du modal
modal.component.html
<div>
<h1>This is my modal</h1>
<button (click)="onCloseModal($event)">Submit form</button>
</div>
modal.component.ts
@Component({
selector: 'app-modal',
templateUrl: './modal.component.html',
styleUrls: ['./modal.component.scss']
})
export class ModalComponent {
@Output() closeModalEvent = new EventEmitter<boolean>();
constructor() { }
onCloseModal(event: any){
this.closeModalEvent.emit(false);
}
}
Maintenant, le code du parent
parent.component.html
<div>
<app-modal [modalVisible]="isVisible" (closeModalEvent)="onClose($event)"></app-modal>
<button (click)="showModal()">open modal</button>
</div>
parent.component.ts
@Component({
selector: 'app-parent',
templateUrl: './parent.component.html',
styleUrls: ['./parent.component.scss']
})
export class ModalComponent {
modalVisible = false;
constructor() { }
onClose(isVisible: boolean){
this.modalVisible = isVisible;
}
showModal(){
this.modalVisible = true;
}
}
Il me semble que vous avez deux options ici.
1.) Ajoutez également le rejet de données à votre bouton Créer.
2.) Vous pouvez utiliser @ViewChild à partir de @ angular/core et JQuery pour obtenir une référence au modal, puis cliquez sur Créer pour le fermer.
Pour la deuxième option, vous devrez importer JQuery dans votre projet, quoi que cela signifie pour vous. Ensuite, vous pouvez utiliser ViewChild avec JQuery comme ceci:
@ViewChild('completeModal') completeModal: ElementRef;
$(this.completeModal.nativeElement).modal('hide');
Si vous souhaitez fermer le modal du composant, vous pouvez utiliser
$("#createLabel").modal("hide");
Sinon, vous pouvez changer le type de bouton sumbit de "soumettre" en bouton et utiliser comme suit
<button type="button" (click)='onsubmit()' data-dismiss="createLabel">Create</button>
cela fermera votre modal et vous appellera en même temps soumettre la fonction.
le moyen le plus simple de fermer le popup modal lors de la soumission est le suivant:
<a class="confirm" data-dismiss="modal" (click)="save()">Confirm</a>
Dans angular utilisez jQuery au lieu de $ car vous pouvez facilement identifier
declare var jQuery:any;
Pour fermer, écrivez la ligne ci-dessous dans votre composant
jQuery("#myModal").modal("hide");
Ou
jQuery('#addEditUserModal').modal('toggle');