dom事件侦听器中的Router.navigation



我正在使用Angular 8

任务听起来像这样:用户在两个选项卡中打开应用程序。用户已登录。如果用户在第一个选项卡中注销,则第二个选项卡应将用户重定向到/login

我使用localstorage来存储用户的数据和当localstorage更改时触发的storagedom事件。

这是我的代码:

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'时,重定向有效。

thisthis._router未定义

控制台中没有错误或警告。

上面的代码出了什么问题?

问题是,当事件被触发时,回调是从不同的上下文执行的,即从窗口执行。所以在这种情况下,这个将引用窗口,并且在那里您没有注入路由器。

您可以尝试使用以下方法将您的服务this绑定到事件侦听器:
window.addEventListener('storage', this._onStorageListener.bind(this));

最新更新