Angular 2/4 : 如何在不重新创建组件的情况下更改路线
Angular 2/4 : how to change route without recreating the component
我有几个指向同一组件的路径(即 /projects、/projects/create、/projects/:id 和 children,都指向我的 ProjectComponent)。
在 /projects/:id 之间导航时,仅更改 :id 一切正常,我可以订阅参数并相应地更新我的内容,但是当我从 /projects 导航到 /projects/create 或 /projects/:id 时,组件已重新创建。
有没有办法在不重新创建的情况下导航到指向同一组件的路由?
您应该实施自定义 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
调整为仅具有可重复使用组件的某些路径,但我会留给您来了解具体方法。
我有几个指向同一组件的路径(即 /projects、/projects/create、/projects/:id 和 children,都指向我的 ProjectComponent)。 在 /projects/:id 之间导航时,仅更改 :id 一切正常,我可以订阅参数并相应地更新我的内容,但是当我从 /projects 导航到 /projects/create 或 /projects/:id 时,组件已重新创建。
有没有办法在不重新创建的情况下导航到指向同一组件的路由?
您应该实施自定义 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
调整为仅具有可重复使用组件的某些路径,但我会留给您来了解具体方法。