Angular 2: Директива Подписаться на наблюдаемые услуги - PullRequest
0 голосов
/ 25 апреля 2018

Как можно подписать директиву на службу, чтобы при обновлении службы директива обновлялась.Например, предположим, что я хочу, чтобы представление реагировало из директивы разрешения, и вместо того, чтобы передавать данные из каждого компонента в директиву при изменении чего-либо, директива будет ждать, пока в нее не будет передано новое обновление разрешения, чтобы отразить измененияиз службы вместо изменения входа.Таким образом, директивы разрешений управляют самими собой, при этом не требуется, чтобы каждый компонент управлял данными, вводимыми в него.

 <div *hasPermission="'admin_user_reset'"></div>

И некоторые директивы, которые подписаны на службу.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

вы можете использовать ngOnChanges с параметром SimpleChanges, который сравнивает новое и предыдущее значение входных значений после изменений

@Input() public hasPermission: any; 

ngOnChanges(changes: SimpleChanges){
  if(changes.hasPermission){
    // add your control here
  }
}`
0 голосов
/ 25 апреля 2018

Вы можете использовать RxJs Subject в вашем Service и subscribe в вашем Directive.

Каждый раз, когда данные изменяются, Subject будет испускать новые данные для вашего Directive, который подписывается на Subject.

Например, в вашем Сервис :

...
private subject = new Subject<any>();

changePermission(permission: string) {
    this.subject.next({ text: permission });
}

getMessage(): Observable<any> {
    return this.subject.asObservable();
}
...

В вашей Директиве :

...
permission: any;
subscription: Subscription;

constructor(private myService: MyService) {
    // subscribe to permission changes
    this.subscription = this.myService.getMessage().subscribe(permission => { this.permission = permission; });
}

ngOnDestroy() {
    // unsubscribe to ensure no memory leaks
    this.subscription.unsubscribe();
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...