Angular 主体角度动态导航

Angular 主体角度动态导航,angular,rxjs,Angular,Rxjs,我有一个动态加载的导航,目前在一定程度上可以工作。初始加载时,一切正常,如果在站点周围移动,则单击的各种元素在单击时会高亮显示为活动 这是从组件(navComponent)加载的,onInit调用服务(navService)并获取相关导航项 但是,如果呈现的其中一个页面的内容中有一个链接,例如,返回到主页-该链接起作用,页面呈现,但导航不会更新以突出显示新的导航项目。这是因为我没有使用routerLinkActive等来设置链接样式,因为这对我不起作用。相反,我遍历每个导航项并相应地应用样式。此

我有一个动态加载的导航,目前在一定程度上可以工作。初始加载时,一切正常,如果在站点周围移动,则单击的各种元素在单击时会高亮显示为活动

这是从组件(navComponent)加载的,onInit调用服务(navService)并获取相关导航项

但是,如果呈现的其中一个页面的内容中有一个链接,例如,返回到主页-该链接起作用,页面呈现,但导航不会更新以突出显示新的导航项目。这是因为我没有使用routerLinkActive等来设置链接样式,因为这对我不起作用。相反,我遍历每个导航项并相应地应用样式。此迭代仅在单击导航项目时发生,如果用户通过链接而不是单击导航项目前往路线,则导航不会更新

我想解决这个问题的办法是使用一个主题,订阅导航,然后对于导航本身之外的任何链接,调用该主题的next(),导航应该相应地更新

理论上这似乎是合理的,但事实上,当我订阅我的主题时,我没有得到任何价值回报。从在线阅读来看,这可能是由于订阅发生在调用下一个之前。因此,通过一种黑客手段,在我的nav组件中,我首先调用updateNav(),这是一个填充next()的服务调用,然后调用getNav()订阅主题

考虑到我刚刚打了next,然后在我订阅的下一行中,我会认为应该返回数据,但仍然没有

这就是服务

private navSubject = new Subject<any>;

updateNav(){
    this.navSubject.next(getNavItems());
} 

getNav(){
    return this.navSubject.asObservable();
}

getNavItems(){
 // does a http request and returns an observable of nav items.
}

private navSubject=新主题;
updateNav(){
this.navSubject.next(getNavItems());
} 
getNav(){
返回此.navSubject.asObservable();
}
getNavItems(){
//执行http请求并返回可观察的导航项。
}

你知道为什么我在订阅之前就给updateNav打了电话,但我的主题是空的吗?我想可能是因为主题没有初始值,所以我改为BehaviorSubject,但最终结果是一样的。

如果您发出http请求,您应该等待该方法响应,然后将该值分配给
Subject