Devo essere in grado di aggiungere & rimuovere al volo componenti angolari 2. Per farlo, sto usando loadIntoLocation e smaltire i metodi, simile al primo:Angolare 2 - Aggiunta/rimozione componenti al volo
Aggiunta di un componente (da un gestore di layout):
this.m_loader.loadIntoLocation(MyComponent, this.m_element, 'content').then(_componentRef => {
// Create the window and set its title:
var component: MyComponent = (_componentRef.instance);
component.ref = _componentRef;
// init the component content
});
rimozione di un componente (dal componente):
this.ref.dispose();
e 'quasi funzionando: - se posso aggiungere un componente, e chiuderlo, funziona - se posso aggiungere diversi componenti, lavorano - ma se aggiungo componente a, quindi rimuoverlo, quindi aggiungere il componente B, sembra come angolare mi dà un riferimento ad A, e mantiene alcuni vecchi valori (i miei componenti sono trascinabili, e in questo caso la B verrà creata A era quando l'ho distrutto)
C'è un modo per rendere Angular distruggere i componenti correttamente, o almeno per costringerlo a crearne di nuovi?
Riesci a riprodurre il comportamento in un plnkr? Ho [questo funziona] (http://plnkr.co/edit/z9xu3x2jVAEaoJq6TbRB?p=preview), ma non sono in grado (e non so davvero) come riprodurre il problema –
Sì, ho biforcuto il tuo plunker: http://plnkr.co/edit/lvQfnLfTImcRqRcxJaXU?p=preview. Fai clic su "Aggiungi nuovo componente", trascinalo da qualche parte, fai clic su "Rimuovi", quindi fai nuovamente clic su "Aggiungi nuovo componente": il componente viene creato nella posizione appena rimossa. –
Il problema sembra essere che angular2 di default riutilizza gli elementi DOM creati (preso da [questo commento] (https://github.com/angular/issues/4795#issuecomment-151688714)). Quindi se nel tuo bootstrap hai impostato 'provide (APP_VIEW_POOL_CAPACITY, {useValue: 0}' funzionerà bene. Ecco il [plnkr updated] (http://plnkr.co/edit/bqo9K5bru4CN1jZ4r9mt?p=preview). –