我需要在用户导航到另一页时销毁Angular2应用程序(注意:这是一个我们仅将Angular2用于一页的应用程序)。因此,当用户离开此页面时,我们必须取消引导ng2应用程序。
我接受applicationRef如下:
platformBrowserDynamic([
{provide: 'ConfigService', useValue: {} }
]).bootstrapModule(AppModule).then((appModule:NgModuleRef<AppModule>)=>{
const appRef = appModule.injector.get(ApplicationRef);
if(!!callback)
callback(appRef);
});
并且当此页面破坏时,我打电话给
_ref.components[0].hostView.destroy();
其中_ ref是在上面的回调中传递的应用程序引用。
整个流程调用了应用程序中每个组件的ngOnDestroy,但是,当我导航到非角度页面时,我可以看到这些组件仍然存在于内存中,并在打开同一页面时导致性能问题再次。
从屏幕快照中可以看到,即使我如上所述破坏了应用程序,该组件仍然存在并且正在消耗内存。
这里是什么问题。销毁应用程序不足以清除内存吗?
我知道这是一个非常老的问题,但这可能会有所帮助。
如果您正在寻找一个在销毁角度应用程序时执行的事件,则可以使用具有PlatformRef
回调的OnDestroy()
在main.ts中
function doSomethingOnAppDestory() {
console.log('test');
}
platformBrowserDynamic().bootstrapModule(AppModule).then(ref => {
// Ensure Angular destroys itself on hot reloads.
if (window['ngRef']) {
window['ngRef'].destroy();
}
window['ngRef'] = ref;
ref.onDestroy(doSomethingOnAppDestory);
// Otherwise, log the boot error
}).catch(err => console.error(err));