Ho un componente padre con due componenti figlio (dataset-create
e) in Angular2. I controlli componente padre quale dei due componente figura in qualsiasi momento utilizzando questo codice nel suo modello:Angolare 2: componenti che si rimuovono dal DOM
<div [ngSwitch]="mode">
<template [ngSwitchWhen]="'create'">
<dataset-create [dataset]="dataset" (close)="onDatasetFormClose()"></dataset-create>
</template>
<template [ngSwitchWhen]="'detail'">
<dataset-detail [dataset]="dataset" (close)="onDatasetFormClose()"></dataset-detail>
</template>
</div>
Il genitore intercetta l'evento (close)
dai bambini. Quando riceve, una funzione di callback viene chiamato (onDatasetFormClose()
) che ha il seguente codice:
private onDatasetFormClose() {
this.mode = "list";
}
Questa funzione cambia il valore della variabile mode
. Ciò causa il fallimento di entrambe le istruzioni ngSwitchWhen
e quindi il componente figlio attualmente attivo viene distrutto.
Inoltre, Cordiali saluti, questo è come il modello di uno dei componenti figlio assomiglia:
<form novalidate="novalidate">
<button type="button" (click)="onClose()">close</button>
<button type="submit" (click)="onSubmit()">submit</button>
<label for="dataFileD">data</label>
<input id="dataFileD" type="file" (change)="onFileChange($event)">
</form>
Tuttavia, questa soluzione appare "sbagliato" per me, perché si basa sul componente principale (rendendo così è più difficile riutilizzarlo in modo indipendente).
Immagino che un altro modo per ottenere un risultato simile sarebbe quello di utilizzare un router. Questa soluzione non solo suona "troppo gonfia per non-ragione", ma soffre anche dello stesso problema della mia soluzione sopra: il componente figlio non può essere usato indipendentemente.
È possibile che un componente figlio si rimuova dal DOM? Qual è il modo corretto di gestire situazioni come questa? Forse avere componenti che si rimuovono dal DOM è una cattiva pratica di codifica Angular2?
Grazie in anticipo.
Penso che per un componente sia necessario un componente padre. Qualsiasi componente che emette un evento richiede probabilmente un componente principale. Ad esempio, per implementare le schede, è probabilmente necessario un componente 'tabset' padre, oltre ai componenti figlio' tab'. –