RouteReuseStrategy中的依赖关系

时间:2018-04-17 18:36:39

标签: angular dependency-injection angular2-routing

我正在尝试实现自定义RouteReuseStrategy。像this answer这样的资源在理解正在发生的事情方面是非常宝贵的,但我发现自己陷入了困境:

我的策略依赖于我的一个服务,它用来知道用户是否注销它清除了缓存的路由。根据我的尝试,它会有所不同,但我似乎与this question中提出的问题相同。不幸的是,该问题的相应答案使用了一种弃用的方法,当我尝试替代方案时,我会以某种方式得到一个不同于应用程序其他部分的服务实例。

作为参考,我有这样的事情:

export class CustomReuseStrategy implements RouteReuseStrategy {
    // Cache of reusable routes.
    protected handlers: {[key: string]: DetachedRouteHandle} = {};

    constructor(private userService: UserService) {
        this.userService// When the user
            .logoutEvent$// logs out,
            .subscribe(() => this.handlers = {});// clear the cache.
    }

    // Implementations of RouteReuseStrategy methods.
    // ...
}

如何确保将服务视为单身?或者我还有另一种方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

这是您可以考虑的另一种方法。这在Angular 5中对我有效,但在某些旧版本中也应适用。

实施一种方法来清除CustomReuseStrategy中的处理程序。

export class CustomReuseStrategy implements RouteReuseStrategy {
   // Cache of reusable routes.
   protected handlers: {[key: string]: DetachedRouteHandle} = {};

   clearHandlers(){
      this.handlers = {};
   }

   // Implementations of RouteReuseStrategy methods.
   // ...

}

由于RouteReuseStrategy是一项服务,因此您可以将其注入到UserService服务中,并在服务执行登录/注销时调用该方法以清除处理程序。

请注意,您需要将注入的服务转换为自定义类以调用自定义方法。

export class UserService{

   constructor(private routeReuse:RouteReuseStrategy){}

   doLogin(){
      // After login is successful, clear the handlers
      //...
      (<CustomReuseStrategy>this.routeReuse).clearHandlers();
   }
}