【发布时间】:2019-07-10 17:07:12
【问题描述】:
是否可以永久监听服务中的所有更改并将此信息传输到组件?
我知道我可以在如下服务中创建 Observable:
@Injectable()
export class LoadingService {
myBool$: Observable<boolean>;
private boolSubject: BehaviorSubject<boolean>;
constructor() {
this.boolSubject = new BehaviorSubject(true);
this.myBool$ = this.boolSubject.asObservable();
}
set myBool(newValue) {
console.log("set",newValue)
this.boolSubject.next(newValue);
}
}
我也知道我可以有一个组件或指令(如下所示)来订阅 observable 以获得有关更改的通知。
@Directive({
selector: '[loading]'
})
export class LoadingDirective implements AfterViewInit {
constructor(
private element: ElementRef,
private renderer: Renderer2,
private loadingService: LoadingService
) {
this.loadingService.myBool$.subscribe(response => {
console.log("-----",response)
})
}
但我只得到subscribe 中服务变量的第一次更改。我怎样才能获得所有未来的变化(如事件监听器)?
感谢您的帮助!
【问题讨论】:
-
这应该有效,并且总是当通过服务设置新值时,应该调用订阅者。你确定你不会在某个时候退订吗?
-
您的代码应该可以工作。如果不是,请创建一个stackblitz example 来重现您的问题。
-
真正的问题是:如何在可观察值发生变化时始终触发函数?我知道当我在 HTML 代码中使用它时它可以工作,但是我的场景中没有任何 HTML 并且想要调用一个函数....有什么想法吗?
标签: angular rxjs components observable