2016-08-25 3 views
1

mit einem Problem mit eckigen 2 reinitialisieren mehr von der gesamten Anwendung als ich dachte, es würde auf Route Navigation. eine schnelle Demo erstellen i die Winkel 2 Routing-Tutorial Plunker kopierte das Problem zu entlarven:Angular 2 RC5 Kind Route neu geladen, die Komponente und Modul

http://plnkr.co/edit/wAjaIAva0caufEZJG36s?p=preview

in dieser vertraut aussehenden Demo, die Krisenzentrum Routen sind von den krisen center.module faul belastete . Ich habe ein paar "Widget" Platzhalter auf den Seiten des Krisenzentrums hinzugefügt. Wenn Sie auf den Link "Crisis Center" klicken, dann mit dem Link "Widget hinzufügen" ein paar Mal inkrementieren und dann auf eine der untergeordneten Listen klicken, werden Sie feststellen, dass zwei der Widget-Counter neu initialisiert werden.

Es scheint, dass die krisen center.module, die crisis.service es, und die Krise-center.component bietet alle neu initialisiert vollständig mit jeder Route ändern! Für einfache Systeme mag dies kein Problem sein, aber alle wichtigen Zustandsdaten (wie etwa eine API-Sitzung) in Bezug auf die Krise. Der Dienst, der von dem Krisenzentrum-Modul bereitgestellt wird, würde bei jeder Navigation verloren gehen, anders als alle Daten in der app.service, der vom app.module bereitgestellt wird.

diese App Layout betrachten, die näher an meinem eigentlichen Problem App ist:

|- /app 
| |- app.component 
| |- app.module 
| |- app.routing      <-- app routes, including lazy load for feature.module for all /feature routes (loadChildren) 
| |- app-api.service     <-- provided by app.module, handles master auth 
| |- /feature 
| | |- /child-feature 
| | | |- child-feature-1.component <-- displays in feature.component's router-outlet 
| | | '- child-feature-2.component <-- displays in feature.component's router-outlet 
| | |- feature-api.service   <-- this feature's api, provided by feature.module 
| | |- feature-container.component <-- has a router-outlet for child-features 
| | |- feature-menu.component  <-- displays in feature.component 
| | |- feature-status.component  <-- displays in feature.component 
| | |- feature.module    <-- provides feature-api.service 
| | '- feature.routing    <-- feature routes, loaded in feature.module 
| |- /other-feature 
| | |- other-feature.component 
| | |- other-feature-list.component 
| | |- other-feature-detail.component 
| | |- other-feature.module 
| | '- other-feature.routing 
| '- main 
|- /node_modules 
|- /typings 
|- index.html 
|- systemjs.config.js 
'- tsconfig.json 

in meiner Anwendung, 'feature.module' erfordert Authentifizierung an einen bestimmten api, aber das Auth ist in keiner anderen erforderlich Bereich der App. als solcher möchte ich nur den api-service in diesem modul laden und ihn vom restlichen app isolieren. Wie in der Demo wird diese API zwischen jeder Routen-Navigation neu initialisiert. Auch das Feature-Menü und der Feature-Status außerhalb des Router-Outlets im Feature-Container werden auf jedem Routen-Nav neu initialisiert.

das scheint wirklich kontraintuitiv - sollte nicht angular nur die Innenrouter-Outlet-Komponente auf Sub-Navigation ändern? Auch wenn ein Modul (und alle Dienste, die es zur Verfügung stellt) geladen werden, sollten sie dann nicht Teil der gesamten Anwendung sein und nicht auf jedem Routen-Nav neu initialisiert werden?

Ich denke, meine Frage ist, "soll angular 2 dieses Verhalten haben?" und wenn die Antwort "Ja" ist, dann "Wie soll ich in Submodulen Stateful Services halten?" und auch "Gibt es eine Möglichkeit, die Navigation zu erzwingen, um nur auf den innersten Router-Outlet anzuwenden (ohne einen benannten Outlet zu verwenden)?"

Vielen Dank für das Lesen dieser Novelle, und jede Eingabe wird sehr geschätzt. Neu geschrieben, die Frage zu hoffentlich es deutlicher zu machen;)

Antwort

1

Falls jemand eine dieser beiden Fragen hat, beide sind vollständig feste in RC6. Nicht sicher, wie niemand während RC5 einen größeren Gestank darüber gemacht hat, aber zumindest ist es jetzt gelöst :)

Verwandte Themen