我正在使用Angular 8
任务听起来像这样:用户在两个选项卡中打开应用程序。用户已登录。如果用户在第一个选项卡中注销,则第二个选项卡应将用户重定向到/login
。
我使用localstorage来存储用户的数据和当localstorage更改时触发的storage
dom事件。
这是我的代码:
private _redirectIfUserLoggedOut(): void {
window.addEventListener('storage', this._onStorageListener);
}
private _onStorageListener = () => {
const currentUser = localStorage.getItem('__session_token');
if (!currentUser) {
this._router.navigate(['/login']) // this call doesn't work
}
}
问题是:这个_router.navigation不起作用。只是什么都没发生。但当我将this._router.navigate
更改为window.location.href = '/login'
时,重定向有效。
this
和this._router
是未定义
控制台中没有错误或警告。
上面的代码出了什么问题?
问题是,当事件被触发时,回调是从不同的上下文执行的,即从窗口执行。所以在这种情况下,这个将引用窗口,并且在那里您没有注入路由器。
您可以尝试使用以下方法将您的服务this绑定到事件侦听器:window.addEventListener('storage', this._onStorageListener.bind(this));