diff --git a/modules/@angular/router-deprecated/src/router.ts b/modules/@angular/router-deprecated/src/router.ts index ad8c6bd5f3..f6098fedb3 100644 --- a/modules/@angular/router-deprecated/src/router.ts +++ b/modules/@angular/router-deprecated/src/router.ts @@ -9,7 +9,6 @@ import {RouterOutlet} from './directives/router_outlet'; import {getCanActivateHook} from './lifecycle/route_lifecycle_reflector'; import {RouteDefinition} from './route_config/route_config_impl'; import {Injectable, Inject} from '@angular/core'; -import {DefaultInstruction} from "./instruction"; let _resolveToTrue = PromiseWrapper.resolve(true); let _resolveToFalse = PromiseWrapper.resolve(false); @@ -132,9 +131,8 @@ export class Router { */ isRouteActive(instruction: Instruction): boolean { var router: Router = this; - var currentInstruction = this.currentInstruction; - if (isBlank(currentInstruction)) { + if (isBlank(this.currentInstruction)) { return false; } @@ -144,28 +142,22 @@ export class Router { instruction = instruction.child; } - let reason = true; + if (isBlank(instruction.component) || isBlank(this.currentInstruction.component) || + this.currentInstruction.component.routeName != instruction.component.routeName) { + return false; + } - // check the instructions in depth - do { - if (isBlank(instruction.component) || isBlank(currentInstruction.component) || - currentInstruction.component.routeName != instruction.component.routeName) { - return false; - } - if (isPresent(instruction.component.params)) { - StringMapWrapper.forEach(instruction.component.params, (value, key) => { - if (currentInstruction.component.params[key] !== value) { - reason = false; - } - }); - } - currentInstruction = currentInstruction.child; - instruction = instruction.child; - } while (isPresent(currentInstruction) && isPresent(instruction) && - !(instruction instanceof DefaultInstruction) && reason); + let paramEquals = true; - // ignore DefaultInstruction - return reason && (isBlank(instruction) || instruction instanceof DefaultInstruction); + if (isPresent(this.currentInstruction.component.params)) { + StringMapWrapper.forEach(instruction.component.params, (value, key) => { + if (this.currentInstruction.component.params[key] !== value) { + paramEquals = false; + } + }); + } + + return paramEquals; } diff --git a/modules/@angular/router-deprecated/test/integration/router_link_spec.ts b/modules/@angular/router-deprecated/test/integration/router_link_spec.ts index edf1c79372..55d7b2cf11 100644 --- a/modules/@angular/router-deprecated/test/integration/router_link_spec.ts +++ b/modules/@angular/router-deprecated/test/integration/router_link_spec.ts @@ -295,51 +295,6 @@ export function main() { router.navigateByUrl('/child-with-grandchild/grandchild?extra=0'); }); })); - - it('should not be added to links in other child routes', - inject([AsyncTestCompleter], (async) => { - router.config([ - new Route({path: '/child', component: HelloCmp, name: 'Child'}), - new Route({ - path: '/child-with-grandchild/...', - component: ParentCmp, - name: 'ChildWithGrandchild' - }), - new Route({ - path: '/child-with-other-grandchild/...', - component: ParentCmp, - name: 'ChildWithOtherGrandchild' - }) - ]) - .then((_) => compile(`Child - Better Child - Better Child - `)) - .then((_) => { - var element = fixture.debugElement.nativeElement; - - fixture.detectChanges(); - - var link1 = getDOM().querySelector(element, '.child-link'); - var link2 = getDOM().querySelector(element, '.child-with-grandchild-link'); - var link3 = getDOM().querySelector(element, '.child-with-other-grandchild-link'); - - expect(link1).not.toHaveCssClass('router-link-active'); - expect(link2).not.toHaveCssClass('router-link-active'); - expect(link3).not.toHaveCssClass('router-link-active'); - - router.subscribe((_) => { - fixture.detectChanges(); - - expect(link1).not.toHaveCssClass('router-link-active'); - expect(link2).toHaveCssClass('router-link-active'); - expect(link3).not.toHaveCssClass('router-link-active'); - - async.done(); - }); - router.navigateByUrl('/child-with-grandchild/grandchild?extra=0'); - }); - })); }); describe('when clicked', () => {