Angular 角度10设置路线更改的可见性

Angular 角度10设置路线更改的可见性,angular,Angular,我有一个角度应用程序,我正试图根据路线更改导航组件上的可用选项。我用类似这样的东西来工作: *ngIf="router.url.split('?')[0].split('#')[0] === '/home'" 但是,我正在进行一些更新,逻辑有点复杂,所以我不希望在HTML中这样做。我尝试订阅路由器事件并设置属性,但它似乎不起作用。下面是我的组件初始化方法: ngOnInit() { this.scroller.setOffset([0, 98]); th

我有一个角度应用程序,我正试图根据路线更改导航组件上的可用选项。我用类似这样的东西来工作:

*ngIf="router.url.split('?')[0].split('#')[0] === '/home'"
但是,我正在进行一些更新,逻辑有点复杂,所以我不希望在HTML中这样做。我尝试订阅路由器事件并设置属性,但它似乎不起作用。下面是我的组件初始化方法:

  ngOnInit() {
    this.scroller.setOffset([0, 98]);
    this.authService.UserIsAdmin.subscribe(admin => this.UserIsAdministrator = admin);

    this.router.events
      .pipe(filter(event => event instanceof NavigationEnd || event instanceof NavigationStart))
      .subscribe((e: NavigationEnd) => {
        const isHome = e.url.split('?')[0].split('#')[0] === '/home';
        this.ShowStandardItems = isHome;
        this.ShowAdminItems = this.UserIsAdministrator && (isHome || Constants.AdminRoutes.indexOf(e.url) !== -1);
        this.ShowHome = this.ShowAdminItems && !isHome;
        console.log(`${this.ShowStandardItems}/${this.ShowHome}/${this.ShowAdminItems}`);
      });
  }
以及html中的绑定示例:

  <a routerLink="/customer-management" [class.currentPage]="router.url === '/customer-management'"
     *ngIf="ShowAdminItems">
    CUSTOMERS
  </a>
我在最后有控制台日志,我可以看到它正确设置了这些属性,并点击了事件处理程序,但在我的UI上没有显示任何内容,所有项目都不可见。如果我将它们的默认值更改为true,那么即使它们不应该显示,它们也会显示出来,因此它不会根据这些属性更新UI

我也尝试过只订阅
NavigationEnd
,在构造函数中订阅而不是
ngOnInit
,但两者都没有任何区别

真正奇怪的是,如果我强迫某些设备一直处于开启状态,然后从那里开始导航,它会突然开始工作。就好像第一次不起作用,之后又起作用

我还应该提到的是,它的主页首先进行登录,然后使用路由器导航到主页。我尝试了
this.router.navigate()
this.router.navigateByUrl()
来进行导航,但没有任何区别


如何实现这一点?

第二个订阅中可能无法访问this.UserIsAdministrator,因为第二个订阅可能会在第一个订阅之前解决。我认为可能是这样,但经过一些测试后,我不这么认为。我将秒的超时设置为5秒,因此它会在整整5秒后更新这些超时,而问题仍然存在。此外,根据日志记录,它正确地设置了这些属性,UI只是没有相应地更新。
public ShowStandardItems = false;