fix(router): update route snapshot before emit new values (#13558)

Closes #12912
This commit is contained in:
Dzmitry Shylovich
2016-12-28 02:57:22 +03:00
committed by Hans
parent 0ac8e102de
commit 07e0fce8fc
2 changed files with 25 additions and 12 deletions

View File

@ -328,22 +328,23 @@ function serializeNode(node: TreeNode<ActivatedRouteSnapshot>): string {
*/
export function advanceActivatedRoute(route: ActivatedRoute): void {
if (route.snapshot) {
if (!shallowEqual(route.snapshot.queryParams, route._futureSnapshot.queryParams)) {
const currentSnapshot = route.snapshot;
route.snapshot = route._futureSnapshot;
if (!shallowEqual(currentSnapshot.queryParams, route._futureSnapshot.queryParams)) {
(<any>route.queryParams).next(route._futureSnapshot.queryParams);
}
if (route.snapshot.fragment !== route._futureSnapshot.fragment) {
if (currentSnapshot.fragment !== route._futureSnapshot.fragment) {
(<any>route.fragment).next(route._futureSnapshot.fragment);
}
if (!shallowEqual(route.snapshot.params, route._futureSnapshot.params)) {
if (!shallowEqual(currentSnapshot.params, route._futureSnapshot.params)) {
(<any>route.params).next(route._futureSnapshot.params);
}
if (!shallowEqualArrays(route.snapshot.url, route._futureSnapshot.url)) {
if (!shallowEqualArrays(currentSnapshot.url, route._futureSnapshot.url)) {
(<any>route.url).next(route._futureSnapshot.url);
}
if (!equalParamsAndUrlSegments(route.snapshot, route._futureSnapshot)) {
if (!equalParamsAndUrlSegments(currentSnapshot, route._futureSnapshot)) {
(<any>route.data).next(route._futureSnapshot.data);
}
route.snapshot = route._futureSnapshot;
} else {
route.snapshot = route._futureSnapshot;
@ -356,4 +357,4 @@ export function advanceActivatedRoute(route: ActivatedRoute): void {
export function equalParamsAndUrlSegments(
a: ActivatedRouteSnapshot, b: ActivatedRouteSnapshot): boolean {
return shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);
}
}