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;