首页 新闻 会员 周边 捐助

angular 中如何在发生路由错误时给 RouteOutlet 塞一个 Component

0
悬赏园豆:30 [待解决问题]

问题场景是这样的,点击 tab 后会浏览器地址栏会切换到 tab 对应的 url

<a nz-tab-link [routerLink]="tab.route" [state]="{ tab }">{{tab.name}}</a>

在 NavigationStart route event 订阅处理函数中会将当前 tab 设置为 active,详见之前的博问 https://q.cnblogs.com/q/151591

async ngOnInit() {
    this._router.events
        .pipe(
            filter(ev => ev instanceof NavigationStart),
            debounceTime(100)
        )
        .subscribe((ev) => {
            this.setActiveTab(ev.url)
        });        
}

如果当前 tab 对应的 url 发生 NavigationError 错误,RouteOutlet 无法加载对应的 component,依然还是 tab 切换前的 component 对应的内容。

开始尝试的解决方法是通过更新 Subject 的方式通知前任 tab 的 component 清除内容,比如通过下面的代码触发清空 sidebar 中的内容:

this.sideBarSvc.$sideBar.next(undefined!);

这样虽然管用,但会带来一个问题,当发生 NavigationError 错误后再点击前任 tab,不会触发前任 tab 的 component(在 RouteOutlet 中加载的)更新内容,所以还是空白,只有再点击另外一个非前任 tab,然后再点击前任 tab 才行。

后来想想干脆直接给 RouteOutlet 塞一个新的 component,如果可以,将是一个更简单有效的方法,但目前不知道怎么在代码中塞这个 component

dudu的主页 dudu | 高人七级 | 园豆:28576
提问于:2025-01-10 16:25
< >
分享
所有回答(1)
0

似乎没有办法实现通过代码在运行时给 RouteOutlet 塞一个 Component

对于 NavigationError 错误后再点击前任 tab 的内容更新问题已经解决,详见 https://q.cnblogs.com/q/151601

dudu | 园豆:28576 (高人七级) | 2025-01-11 14:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册