fix(router): CanDeactivate receives a wrong component

Closes #12592
This commit is contained in:
vsavkin
2016-11-01 12:11:42 -07:00
parent 6fda97287e
commit 830a780cb3
2 changed files with 27 additions and 9 deletions

View File

@ -867,14 +867,25 @@ export class PreActivation {
private deactiveRouteAndItsChildren(
route: TreeNode<ActivatedRouteSnapshot>, outlet: RouterOutlet): void {
const prevChildren: {[key: string]: any} = nodeChildrenAsMap(route);
const r = route.value;
forEach(prevChildren, (v: any, k: string) => {
const childOutlet = outlet ? outlet.outletMap._outlets[k] : null;
this.deactiveRouteAndItsChildren(v, childOutlet);
if (!r.component) {
this.deactiveRouteAndItsChildren(v, outlet);
} else if (!!outlet) {
this.deactiveRouteAndItsChildren(v, outlet.outletMap._outlets[k]);
} else {
this.deactiveRouteAndItsChildren(v, null);
}
});
const component = outlet && outlet.isActivated ? outlet.component : null;
this.checks.push(new CanDeactivate(component, route.value));
if (!r.component) {
this.checks.push(new CanDeactivate(null, r));
} else if (outlet && outlet.isActivated) {
this.checks.push(new CanDeactivate(outlet.component, r));
} else {
this.checks.push(new CanDeactivate(null, r));
}
}
private runCanActivate(future: ActivatedRouteSnapshot): Observable<boolean> {