问题陈述:
- 我有一个 Jmeter 板(父组件),其中有侧边栏和导航栏(子组件)。
- 在侧边栏中,我在链接上应用了自定义权限指令,用于检查范围是否具有查看权限。
- 在导航栏,我有一个管理员,经理和工作人员角色选项菜单&当用户更改角色
- 我想改变侧边栏链接的基础上,改变了范围的权限。
我试着把observable传递到侧边栏
scope$: Observable<Roles> = this.scopeService.scope$;
使用aysnc管道
<app-sidebar [scope]="scope$ | async"></app-sidebar>
在ngOnInit中订阅(& S)
ngOnInit(): void {
this.scopeService.scope$.subscribe();
}
但它不起作用
我看到过使用事件发射器的帖子,但我真的想使用声明式模式。
这里是stackblitz链接,以获得更简短的信息。
1条答案
按热度按时间xriantvc1#
这不是async pipe的工作方式。异步管道自动订阅observable,并获取其值。在你的情况下,你不想这样做,你只是想通过可观察的。你不需要使用async pipe,只需要这样做:
在app-sidebar中:
编辑:
在检查了你的stackblitz之后,我知道你的问题在哪里了。在你的has-permission指令中,你使用了作用域的snapshot而不是订阅它。你应该这样做:
这样,每次范围更改时,都会调用checkPermissions()方法。您仍然需要修复如何显示元素,因为它存在一些问题。您似乎没有清除scole已经拥有权限的选项,并且创建了一个新选项,使其重复。你可以通过像这样制作showElement来修复它: