Angular 2/4:如何在不重新创建组件的情况下更改路径

时间:2017-08-07 13:32:18

标签: javascript angular ngroute

我有几个到同一个组件的路由(即/ projects,/ projects / create,/ projects /:id和children,都指向我的ProjectComponent)。 当在/ projects /:id之间导航时只有:id改变一切都很好,我可以订阅params并相应地更新我的内容,但是当我从/ projects导航到/ projects / create或者/ projects /:id时,组件被重新创建。

有没有办法导航到指向同一组件的路线而不重新创建它?

1 个答案:

答案 0 :(得分:0)

您应该实现自定义RouteReuseStrategy

创建实施RouteReuseStrategy的服务:

export class CustomReuseStrategy implements RouteReuseStrategy {

    handlers: {[key: string]: DetachedRouteHandle} = {};

    shouldDetach(route: ActivatedRouteSnapshot): boolean {
        return true;
    }

    store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {
        this.handlers[route.routeConfig.path] = handle;
    }

    shouldAttach(route: ActivatedRouteSnapshot): boolean {
        return !!route.routeConfig && !!this.handlers[route.routeConfig.path];
    }

    retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {
        if (!route.routeConfig) return null;
        return this.handlers[route.routeConfig.path];
    }

    shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
        return future.routeConfig === curr.routeConfig;
    }
}

并将此提供商添加到@NgModule

providers: [
    {provide: RouteReuseStrategy, useClass: CustomReuseStrategy}
]

您可以将CustomReuseStrategy调整为只有可以重复使用该组件的特定路径,但我会将其留给您查找方法。

source