fix(router): do not finish bootstrap until all the routes are resolved (#14762)
DEPRECATION: Use `RouterModule.forRoot(routes, {initialNavigation: 'enabled'})` instead of `RouterModule.forRoot(routes, {initialNavigtaion: true})`. Before doing this, move the initialization logic affecting the router from the bootstrapped component to the boostrapped module. Similarly, use `RouterModule.forRoot(routes, {initialNavigation: 'disabled'})` instead of `RouterModule.forRoot(routes, {initialNavigation: false})`. Deprecated options: 'legacy_enabled', `true` (same as 'legacy_enabled'), 'legacy_disabled', `false` (same as 'legacy_disabled'). The "Router Initial Navigation" design document covers this change. Read more here: https://docs.google.com/document/d/1Hlw1fPaVs-PCj5KPeJRKhrQGAvFOxdvTlwAcnZosu5A/edit?usp=sharing
This commit is contained in:

committed by
Chuck Jazdzewski

parent
1cff1250ba
commit
5df998d086
@ -6,7 +6,7 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {PlatformLocation} from '@angular/common';
|
||||
import {LOCATION_INITIALIZED, PlatformLocation} from '@angular/common';
|
||||
import {APP_INITIALIZER, InjectionToken, NgZone} from '@angular/core';
|
||||
|
||||
import {WebWorkerPlatformLocation} from './platform_location';
|
||||
@ -18,16 +18,20 @@ import {WebWorkerPlatformLocation} from './platform_location';
|
||||
* @experimental
|
||||
*/
|
||||
export const WORKER_APP_LOCATION_PROVIDERS = [
|
||||
{provide: PlatformLocation, useClass: WebWorkerPlatformLocation},
|
||||
{
|
||||
{provide: PlatformLocation, useClass: WebWorkerPlatformLocation}, {
|
||||
provide: APP_INITIALIZER,
|
||||
useFactory: appInitFnFactory,
|
||||
multi: true,
|
||||
deps: [PlatformLocation, NgZone],
|
||||
deps: [PlatformLocation, NgZone]
|
||||
},
|
||||
{provide: LOCATION_INITIALIZED, useFactory: locationInitialized, deps: [PlatformLocation]}
|
||||
];
|
||||
|
||||
function appInitFnFactory(platformLocation: WebWorkerPlatformLocation, zone: NgZone): () =>
|
||||
export function locationInitialized(platformLocation: WebWorkerPlatformLocation) {
|
||||
return platformLocation.initialized;
|
||||
}
|
||||
|
||||
export function appInitFnFactory(platformLocation: WebWorkerPlatformLocation, zone: NgZone): () =>
|
||||
Promise<boolean> {
|
||||
return () => zone.runGuarded(() => platformLocation.init());
|
||||
}
|
||||
|
@ -20,6 +20,8 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
|
||||
private _hashChangeListeners: Array<Function> = [];
|
||||
private _location: LocationType = null;
|
||||
private _channelSource: EventEmitter<Object>;
|
||||
public initialized: Promise<any>;
|
||||
private initializedResolve: () => void;
|
||||
|
||||
constructor(
|
||||
brokerFactory: ClientMessageBrokerFactory, bus: MessageBus, private _serializer: Serializer) {
|
||||
@ -46,6 +48,7 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
|
||||
}
|
||||
}
|
||||
});
|
||||
this.initialized = new Promise(res => this.initializedResolve = res);
|
||||
}
|
||||
|
||||
/** @internal **/
|
||||
@ -56,6 +59,7 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
|
||||
.then(
|
||||
(val: LocationType) => {
|
||||
this._location = val;
|
||||
this.initializedResolve();
|
||||
return true;
|
||||
},
|
||||
err => { throw new Error(err); });
|
||||
|
Reference in New Issue
Block a user