Angular Material 中的变化不会触发 RxJS Observable

RxJS Observable not triggering on change in Angular Material

我正在尝试在我创建的服务连接到他的服务器后立即执行操作。目前我只是简单地保存一个 connected: boolean 来改变连接和连接丢失的状态,并且 return 它作为一个可观察的。

通过订阅,我只能检索 Observable 的初始状态。当布尔值改变它的值时,订阅 不会 触发。

感谢任何帮助。

app.component.ts(订阅)

ngOnInit() {
    this.moduleService.isConnected().subscribe(value => console.log(value)); 
  }

module.service.ts(在组件中注入)

isConnected(): Observable<boolean> {
    return of(this._mqttApi.isConnected());
  }

mqttApi.ts(这里的布尔值变化)

connected: boolean = false;

onConnect(){
  connected = true;
}

onConnectionLost(){
  connected = false
}

public isConnected(): boolean{
  return this.connected;
}

在您的 module.service.ts 中,您仅返回一个仅使用 of 发出一次的可观察对象。您需要的是 BehaviorSubject 或 Subject 作为已连接 属性 的类型,而不是 mqttApi.ts

中的布尔值

如果您不希望使用此可观察对象的服务对主题进行更改,则使用 connected.asObservable() 使可观察对象 public 生效。否则你也可以使 subject/behaviourSubject public.

并且在您调用的方法中 connected.next(true|false)

像这样:

connected: BehaviorSubject<boolean> = new BehaviorSubject(false);

onConnect(){
  this.connected.next(true);
}

onConnectionLost(){
  this.connected.next(false)
}

public isConnected(): Observable<boolean>{
  return this.connected.asObservable();
}