Я бы постарался избежать сложных логи c, как это на ваш взгляд. Вместо этого добавьте лог c к вашему наблюдаемому вызову. По этой причине я бы также не стал звонить в ваш сервис напрямую с вашего HTML.
constructor(private menuHorService: MenuHorService) {}
menuList$: Observable<any[]>; // TODO: use type
role = 'user'; // TODO: implement
ngOnInit() {
this.menuList$ = this.menuHorService.menuList$.pipe(
map((menuList: any[]) => menuList.filter(x => this.showMenuItem(x)))
);
}
private showMenuItem(menuItem: any): boolean {
return menuItem.title !== 'Admin' || this.role === 'admin';
}
И тогда ваш HTML станет тривиальным. Например:
<!-- dummy html -->
<ng-container *ngFor="let item of menuList$ | async">
<p>
{{item | json}}
</p>
</ng-container>
ДЕМО: https://stackblitz.com/edit/angular-4mtkxs