Je crée un modal et j'en ai fait un composant .
À l'intérieur de j'ai un bouton de fermeture. Je veux détruire lorsque je clique sur ce bouton.
Quelque chose comme ça:
<button (click)="closeModal()">Close</button>
J'ai aussi pourrait faire du bouton de fermeture un composant. Quelque chose comme si nécessaire.
Est-ce possible?
3 Réponses :
Le parent doit détruire son enfant. Ainsi, vous pouvez envoyer un événement depuis l'enfant
modalClosed(isClosed) {
this.showModal = false;
}
Et capturer l'événement dans le parent:
<modal-component *ngIf="showModal" (onClose)="modalClosed($event)">
Et le composant parent:
XXX
* ngIf directive se chargera du reste.
Peut-être une erreur ou deux, je suis sur un mobile ...
Cela l'a fait pour moi ... sacrément ng-bootstrap tab modal contenait des valeurs.
Si vous utilisez la boîte de dialogue modale ngx-bootstrap , par défaut le composant est détruit à la fermeture
Typescript
<div (click)="openModal()" class="btn btn-success"> Modal Component</div>
HTML p>
openModal() {
this.modalRef = this.modalService.show(SomeComponent, {
initialState: {
title: 'Modal title',
data: {}
}
});
}
Créez un ModalControlService qui a un BehaviorSubject booléen
import { Component, OnInit } from '@angular/core';
import { ModalControlService } from '../modal-control.service';
@Component({
selector: 'modal-component',
templateUrl: './modal.component.html',
styleUrls: ['./modal.component.css']
})
export class ModalComponent {
constructor(private modalControlService: ModalControlService) { }
closeModal() {
this.modalControlService.close();
}
}
Fournissez le service à partir du composant dont vous souhaitez héberger le modal afin d'obtenir la même instance du service dans votre composant hôte et votre composant modal.
Dans le composant hôte
<modal-component *ngIf="modalOpen$ | async"></modal-component>
et dans le modèle
import { Component } from '@angular/core';
import { ModalControlService } from './modal-control.service';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ],
providers: [ ModalControlService ]
})
export class AppComponent {
modalOpen$ = this.modalControlService.modalOpen$;
constructor(private modalControlService: ModalControlService) {}
openModal() {
this.modalControlService.open();
}
}
Puis dans le composant modal
import { Injectable } from '@angular/core';
import {BehaviorSubject} from 'rxjs';
@Injectable()
export class ModalControlService {
modalOpen$ = new BehaviorSubject<boolean>(false);
open() {
this.modalOpen$.next(true);
}
close() {
this.modalOpen$.next(false);
}
}
StackBlitz https://stackblitz.com/edit/angular-gc1ugw?file=src%2Fapp%2Fapp.component.ts