如何仅为特定路由激活RouteReuseStrategy

时间:2018-03-07 15:42:48

标签: angular angular-ui-router

是否有办法仅针对特定路线实施RouteReuseStrategy

表示每个路由都有子项,获得自己的RouteReuseStrategy自定义实现,并且只有在特定“树”中的路由时才触发其方法。被激活了。

我目前使用this回答中的代码,但如果可能,我想用上面的逻辑扩展它。

2 个答案:

答案 0 :(得分:6)

创建自定义路由重用策略

import { RouteReuseStrategy, ActivatedRouteSnapshot, DetachedRouteHandle } from "@angular/router";

export class CustomRouteReuseStategy implements RouteReuseStrategy {

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

  shouldDetach(route: ActivatedRouteSnapshot): boolean {
    return route.data.shouldReuse || false;
  }

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

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

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

  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
    return future.data.shouldReuse || false;
  }

}

在路由器模块中,在providers阵列中实施新策略:

providers: [
  { provide: RouteReuseStrategy, useClass: CustomRouteReuseStategy },
  ...
]

然后,使用数据属性声明所需的路由' shouldReuse'设为真

{ path: 'myPath', component: MyComponent, data: { shouldReuse: true } },

只有数据属性shouldReuse设置为true的路由才会被重复使用。

答案 1 :(得分:0)

是的,您可以通过编写自己的RouteReuseStrategy(CustomReuseStrategy)来完成此任务。

对于黑名单或白名单路径,您可以搜索可以在路径下的路由器模块中设置的数据属性,然后选择附加组件(以便稍后重新使用),或者不是。

有助于您入门的有用链接: