2015-11-11 12 views
15

Sto provando a costruire un gestore di finestre con Angular 2. Fondamentalmente, voglio essere in grado di passare da una finestra all'altra (ovvero componenti iniettati in un router) senza perdere il loro stati. Ad esempio, sto modificando un modulo di informazioni sul prodotto quando passo a un elenco di clienti, poi torno al modulo del prodotto e lo trovo nello stesso stato ... È possibile?Angolare 2: scambio tra diversi componenti senza distruggerli

+0

In altre parole, esiste un modo per impedire che i componenti vengano distrutti quando navighiamo su un altro componente? – cangosta

risposta

5

Ecco come ho superato questo requisito.

Una volta modificato il percorso, i componenti di Windows vengono distrutti. Quindi, per salvare lo stato tra quelle istanze di Windows, ho dovuto memorizzarlo manualmente in un servizio iniettato.

Per memorizzare e caricare lo stato per ciascun componente della finestra, ho utilizzato i ganci del ciclo di vita forniti dal router: onActivate (next, prev) e onDeactivate (next, prev).

EDIT

Nel frattempo, ho aperto un issue on Angular 2 github repo richiedere questa funzione.

+0

come hai salvato il stato? usando l'oggetto 'window'? Non posso farlo funzionare. –

+0

Ho lo stato memorizzato in un servizio che viene iniettato nelle mie viste – cangosta

+1

Capisco la parte 'service' ma cosa hai archiviato esattamente. Ho fallito con l'istanza di 'class' e l'oggetto' window', cos'altro dovrei memorizzare? –

5

Checkout canReuse sul router: canReuse in angular2 api docs

se si specifica che il router solito distruggere il componente quando si passa a partire da esso.

+0

Ciao Dennis, hai ragione ... Guardando la documentazione, hai assolutamente ragione! Ma se ti immergi nei dettagli di implementazione (https://github.com/angular/angular/blob/b0009f03d510370d9782cf76197f95bb40d16c6a/modules/angular2/src/router/oututer.outlet), troverai questo: "Se il nuovo bambino il componente ha un Tipo diverso rispetto al componente figlio esistente, questo si risolverà in 'false'. Non è possibile riutilizzare un componente vecchio quando il nuovo componente è di Tipo diverso." In base al loro codice, l'hook di riutilizzo viene attivato solo se si sta navigando verso e da un componente dello stesso tipo. – cangosta

+0

hmmm. Dovrei vederlo in pratica per capire. Il modo in cui l'ho letto è stato che se avessi registrato qualcosa su un componente non avresti potuto cambiare il tipo in seguito. ['Auto'] va sempre a CarsCmp se viene riutilizzato. –

+0

L'ho guardato un po 'di più e sembra che tu abbia ragione riguardo a questa restrizione. Non sono sicuro che sia vero senza testarlo, ma sembra che tu non possa utilizzare due diversi tipi di componenti nello stesso percorso. Sembra una cosa importante per non parlare però. –

Problemi correlati