我正在尝试实现自定义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.
// ...
}
如何确保将服务视为单身?或者我还有另一种方法可以解决这个问题吗?
答案 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();
}
}