fix(router): provide a top-level route segment for injection
This commit is contained in:
parent
d00b26d941
commit
b8136cc26e
|
@ -59,7 +59,7 @@ export class RouterLink implements OnDestroy {
|
|||
@HostBinding() href: string;
|
||||
@HostBinding('class.router-link-active') isActive: boolean = false;
|
||||
|
||||
constructor(@Optional() private _routeSegment: RouteSegment, private _router: Router) {
|
||||
constructor(private _routeSegment: RouteSegment, private _router: Router) {
|
||||
// because auxiliary links take existing primary and auxiliary routes into account,
|
||||
// we need to update the link whenever params or other routes change.
|
||||
this._subscription =
|
||||
|
|
|
@ -8,7 +8,6 @@ import {ComponentResolver} from '@angular/core';
|
|||
import {DEFAULT_OUTLET_NAME} from './constants';
|
||||
import {reflector} from '@angular/core';
|
||||
|
||||
// TODO: vsavkin: recognize should take the old tree and merge it
|
||||
export function recognize(componentResolver: ComponentResolver, rootComponent: Type,
|
||||
url: UrlTree): Promise<RouteTree> {
|
||||
let matched = new _MatchResult(rootComponent, [url.root], {}, rootNode(url).children, []);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import {OpaqueToken, ComponentResolver} from '@angular/core';
|
||||
import {LocationStrategy, PathLocationStrategy, Location} from '@angular/common';
|
||||
import {Router, RouterOutletMap} from './router';
|
||||
import {RouteSegment} from './segments';
|
||||
import {RouterUrlSerializer, DefaultRouterUrlSerializer} from './router_url_serializer';
|
||||
import {ApplicationRef} from '@angular/core';
|
||||
import {BaseException} from '@angular/core';
|
||||
|
@ -18,6 +19,7 @@ export const ROUTER_PROVIDERS_COMMON: any[] = /*@ts2dart_const*/[
|
|||
deps: /*@ts2dart_const*/
|
||||
[ApplicationRef, ComponentResolver, RouterUrlSerializer, RouterOutletMap, Location],
|
||||
},
|
||||
/*@ts2dart_Provider*/ {provide: RouteSegment, useFactory: (r) => r.routeTree.root, deps: [Router]}
|
||||
];
|
||||
|
||||
function routerFactory(app: ApplicationRef, componentResolver: ComponentResolver,
|
||||
|
|
|
@ -39,6 +39,7 @@ export function main() {
|
|||
provide(RouterUrlSerializer, {useClass: DefaultRouterUrlSerializer}),
|
||||
RouterOutletMap,
|
||||
provide(Location, {useClass: SpyLocation}),
|
||||
provide(RouteSegment, {useFactory: (r) => r.routeTree.root, deps: [Router]}),
|
||||
provide(Router,
|
||||
{
|
||||
useFactory: (resolver, urlParser, outletMap, location) => new Router(
|
||||
|
@ -224,6 +225,13 @@ export function main() {
|
|||
|
||||
expect(getDOM().getAttribute(native, "href")).toEqual("/team/33/simple(aux:simple2)");
|
||||
})));
|
||||
|
||||
it("should support top-level link",
|
||||
fakeAsync(inject([Router, TestComponentBuilder], (router, tcb) => {
|
||||
let fixture = tcb.createFakeAsync(LinkCmp);
|
||||
advance(fixture);
|
||||
expect(fixture.debugElement.nativeElement).toHaveText('link');
|
||||
})));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import {DefaultRouterUrlSerializer} from '../src/router_url_serializer';
|
|||
import {DEFAULT_OUTLET_NAME} from '../src/constants';
|
||||
|
||||
export function main() {
|
||||
ddescribe('recognize', () => {
|
||||
describe('recognize', () => {
|
||||
it('should handle position args',
|
||||
inject([AsyncTestCompleter, ComponentResolver], (async, resolver) => {
|
||||
recognize(resolver, ComponentA, tree("b/paramB/c/paramC/d"))
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import {SpyLocation} from '@angular/common/testing';
|
||||
import {Location} from '@angular/common';
|
||||
import {Router, RouterOutletMap} from '../src/router';
|
||||
import {RouteSegment} from '../src/segments';
|
||||
import {RouterUrlSerializer, DefaultRouterUrlSerializer} from '../src/router_url_serializer';
|
||||
import {Component, ComponentResolver} from '@angular/core';
|
||||
|
||||
|
@ -24,4 +25,5 @@ export const ROUTER_FAKE_PROVIDERS: any[] = /*@ts2dart_const*/ [
|
|||
deps: /*@ts2dart_const*/
|
||||
[ComponentResolver, RouterUrlSerializer, RouterOutletMap, Location]
|
||||
},
|
||||
/*@ts2dart_Provider*/ {provide: RouteSegment, useFactory: (r) => r.routeTree.root, deps: [Router]}
|
||||
];
|
||||
|
|
Loading…
Reference in New Issue