Если я правильно понял вашу проблему, вы можете установить текущее имя пользователя в PermissionService
как Subject
. Таким образом, служба может выдавать новые значения при изменении пользователя curren:
service.ts
export class PermissionsService {
user = '';
private currentUser = new Subject<string>();
public setCurrentUser(user) {
this.user = user;
this.currentUser.next(user);
}
checkAuthorization(): Observable<boolean> {
return this.currentUser.pipe(
map( x => { return x === 'me'; })
)
}
}
В приведенном выше коде checkAuthorization
является наблюдаемым для на который вы можете подписаться в своем Directive
. Фактически, этот код почти такой же, как и у вас, за исключением того, что я удалил параметр:
directive.ts
ngOnInit(): void {
this.permissionsService.checkAuthorization()
.pipe(takeUntil(this.stop$))
.subscribe((authorized) => {
this.viewContainer.clear();
if (authorized) {
this.viewContainer.createEmbeddedView(this.templateRef);
}
});
}
Обратите внимание, что вам нужно всегда очищать viewContainer потому что в противном случае он будет создавать новую кнопку каждый раз.
Посмотрите эту демонстрацию, которую я сделал на основе вашего примера: https://stackblitz.com/edit/angular-fevt6t