【发布时间】:2017-04-05 14:40:36
【问题描述】:
我的 Angular 2 应用程序具有注销功能。如果可以,我们希望避免重新加载页面(即document.location.href = '/';),但注销过程需要重置应用程序,因此当另一个用户登录时,前一个会话中没有残留数据。
这是我们的 main.ts 文件:
import 'es6-shim/es6-shim';
import './polyfills';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { ComponentRef, enableProdMode } from '@angular/core';
import { environment } from '@environment';
import { AppModule } from './app/app.module';
if (environment.production === true) {
enableProdMode();
}
const init = () => {
platformBrowserDynamic().bootstrapModule(AppModule)
.then(() => (<any>window).appBootstrap && (<any>window).appBootstrap())
.catch(err => console.error(err));
};
init();
platformBrowserDynamic().onDestroy(() => {
init();
});
您可以看到,当应用程序被销毁时,我正在尝试调用 init() 方法。我们的 user-authentication.service 中的 logout 方法发起了销毁:
logout() {
this.destroyAuthToken();
this.setLoggedIn(false);
this.navigateToLogin()
.then(() => {
platformBrowserDynamic().destroy();
});
}
这会产生以下错误:
选择器“app-root”没有匹配任何元素
任何帮助表示赞赏。
【问题讨论】:
-
我想当你调用 platformBrowserDynamic() 你会得到一个新的平台。您可能需要在第一次调用时存储一个引用,然后在该引用上调用 destroy()。