Angular 5个延迟加载的应用程序和浏览器导航按钮
我有一个很大的应用程序,它主要是由许多延迟加载的模块组成的。我的问题在于浏览器按钮,无论用户单击Angular 5个延迟加载的应用程序和浏览器导航按钮,angular,angular-routing,Angular,Angular Routing,我有一个很大的应用程序,它主要是由许多延迟加载的模块组成的。我的问题在于浏览器按钮,无论用户单击后退、前进还是刷新我的应用程序都会崩溃 就我所研究的而言,我可以通过某种方式捕捉这些事件,阻止它们传播,并亲自处理这些事件 还有其他好的解决办法吗?我应该考虑哪些方面 根据评论进行编辑 我不认为这是一个角度路由器的问题。问题是,我的应用程序在运行时以编程方式更改路由器配置。因此,当用户尝试重新加载或类似操作时,他会尝试输入尚未存在的路径。我可以在导航之前玩数据存储并重新注入路由器配置,但我认为这并不明
后退
、前进
还是刷新
我的应用程序都会崩溃
就我所研究的而言,我可以通过某种方式捕捉这些事件,阻止它们传播,并亲自处理这些事件
还有其他好的解决办法吗?我应该考虑哪些方面
根据评论进行编辑
我不认为这是一个角度路由器的问题。问题是,我的应用程序在运行时以编程方式更改路由器配置。因此,当用户尝试重新加载或类似操作时,他会尝试输入尚未存在的路径。我可以在导航之前玩数据存储并重新注入路由器配置,但我认为这并不明智
我所说的崩溃只是指一些错误,比如找不到路由“x\a\b”
我现在的想法是捕捉浏览器按钮的事件并自己处理,改变它们的工作方式,但我不确定这是否可能(我猜是gmail做的事情) 我还有大量的路由,为了处理路由更改,我使用routeEvent
import {ActivatedRoute, Event, NavigationEnd, NavigationError, NavigationStart, Router} from '@angular/router';
...
routerEvent;
constructor(private router: Router,
private route: ActivatedRoute) {
this.routerEvent = router.events.subscribe((event: Event) => {
if (event instanceof NavigationStart) {
// Show loading indicator
}
if (event instanceof NavigationEnd) {
// Hide loading indicator
this.init();
}
if (event instanceof NavigationError) {
// Hide loading indicator
// Present error to user
}
});
}
正如事件名称所示,NavigationStart在新加载路线时触发,NavigationEnd在路线导航加载完成时触发,NavigationError在路线加载失败时触发
在不再需要的时候取消订阅也是个好主意
ngOnDestroy(): void {
this.routerEvent.unsubscribe();
}
你能把你的路线写下来吗configurations@IzzoObella不是真的,我在应用程序中通过编程方式添加/删除路由来使用它。这不是一个真正的静态配置,而是一个动态配置。我相信这不是角度路由问题。这可能是托管应用程序的服务器的原因。它是在IIS上托管的吗?你说的“崩溃”到底是什么意思?我不认为这会有帮助。我说的是一种处理来自浏览器按钮而不是我的应用程序内部的事件的方法。你能解释一下我应该如何利用这一点,例如,让我的应用程序在
刷新时不崩溃吗?你在刷新时运行的哪些进程导致它崩溃,或者你所说的崩溃到底是什么意思crash@user1640736我用它来动态加载路线,因此,onInit中的所有逻辑都被移动到NavigationStart,以便例如在刷新时执行此代码。