Angular 2 : Directive Subscribe To Observables of a service

标签 angular rxjs angular2-directives angular2-observables

如何让指令订阅服务,以便当服务更新时,指令也会更新。例如,假设我希望 View 根据权限指令使用react,并且当某些内容发生更改时,该指令不会将每个组件的数据提交到指令中,而是等到将新的权限更新推送到它以反射(reflect)更改来自服务而不是输入更改。因此,权限指令可以自行管理,而不需要每个组件都必须管理注入(inject)其中的数据。

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

还有一些订阅服务的指令。

最佳答案

您可以使用RxJs Subject在您的服务中并将其订阅到您的指令中。

每次数据更改时,Subject 都会发送新数据到订阅此 SubjectDirective >.

例如,在您的服务中:

...
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();
}
...

关于 Angular 2 : Directive Subscribe To Observables of a service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50023788/

相关文章:

angular - 如何隐藏 Ag-grid 中的过滤器图标?

testing - Angular 2 测试 nativeElement

angular - 为什么使用 RxJS .asObservable() getter/factory 函数模式?

angular - 为什么 (ngModel) 不工作?

node.js - 我可以对我从 Angular 中的 Node 模块执行的每个请求使用 http-proxy 吗?

javascript - Firestore : Retrieve a single document

javascript - RxJS:使用 Observable.create 时如何知道需要清理哪些内容

angular - Angular 2 中的延迟加载文件夹

angular - 当我想明确清除未定义的属性 'viewContainerRef' 时,无法读取它

html - 保持 HTML 中的按钮对齐