gpt4 book ai didi

延迟加载模块上的 Angular 9 路由器事件

转载 作者:行者123 更新时间:2023-12-04 17:26:37 25 4
gpt4 key购买 nike

我正在为 Angular 提供的 Router.events observable 苦苦挣扎。我的应用程序有两个延迟加载的模块。
每个都有一个导航菜单,显示一些链接以在应用程序内导航。我希望我的链接之一根据当前路线显示为选中状态。
问题是,当我使用基于 router.events observable 的 observable 的异步管道时,在我的模板被 angular 处理之前,路由事件已经发出。
我知道如果我在组件的构造函数中手动订阅,我可以获得数据。如果我在 ngOnInit 函数内部做同样的事情,就像异步管道一样,没有数据发出。
如果我在页面加载后使用链接导航,它工作正常。
你知道我如何实现这一目标吗?
谢谢 !

最佳答案

我有人需要它,这就是我解决它的方法。如果您有延迟加载的模块,请确保在根组件上导入此服务,以便在最开始时进行订阅。

import {Injectable} from '@angular/core';
import {Observable, ReplaySubject} from 'rxjs';
import {filter, map, tap} from 'rxjs/operators';
import {NavigationEnd, Router} from '@angular/router';

@Injectable({
providedIn: 'root'
})
export class RouterService {

_events = new ReplaySubject<string>();

constructor(private readonly router: Router) {
router.events.pipe(
filter(e => e instanceof NavigationEnd),
map(e => e as NavigationEnd),
map((e: NavigationEnd) => e.urlAfterRedirects),
tap((url) => this._events.next(url))
).subscribe();
}

get events(): Observable<string> {
return this._events.asObservable();
}
}

关于延迟加载模块上的 Angular 9 路由器事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62818222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com