如何让指令订阅服务,以便当服务更新时,指令也会更新。例如,假设我希望 View 根据权限指令使用react,并且当某些内容发生更改时,该指令不会将每个组件的数据提交到指令中,而是等到将新的权限更新推送到它以反射(reflect)更改来自服务而不是输入更改。因此,权限指令可以自行管理,而不需要每个组件都必须管理注入(inject)其中的数据。
<div *hasPermission="'admin_user_reset'"></div>
还有一些订阅服务的指令。
最佳答案
您可以使用RxJs Subject
在您的服务
中并将其订阅
到您的指令
中。
每次数据更改时,Subject
都会发送新数据到订阅此 Subject
的 Directive
>.
例如,在您的服务中:
...
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/