RxJS Observable 不会在 Angular Material 发生变化时触发

Nic*_*icO 0 subscription observable rxjs angular

一旦我创建的服务连接到他的服务器,我就会尝试执行操作。目前我只是保存一个connected: boolean改变连接和连接丢失的状态,并将其作为可观察对象返回。

通过订阅,我只能检索可观察对象的初始状态。该认购并没有在布尔改变其价值火(它一样)。

任何帮助表示赞赏。

app.component.ts(订阅)

ngOnInit() {
    this.moduleService.isConnected().subscribe(value => console.log(value)); 
  }
Run Code Online (Sandbox Code Playgroud)

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

isConnected(): Observable<boolean> {
    return of(this._mqttApi.isConnected());
  }
Run Code Online (Sandbox Code Playgroud)

mqttApi.ts(此处更改布尔值)

connected: boolean = false;

onConnect(){
  connected = true;
}

onConnectionLost(){
  connected = false
}

public isConnected(): boolean{
  return this.connected;
}
Run Code Online (Sandbox Code Playgroud)

Erb*_*nig 5

在您的 module.service.ts 中,您只返回一个仅通过使用of. 您需要的是 BehaviorSubject 或 Subject 作为连接属性的类型,而不是 mqttApi.ts 中的布尔值

如果您不希望服务使用此 observable 对主题进行更改,然后使用 connected.asObservable() 将该 observable 设为 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();
}
Run Code Online (Sandbox Code Playgroud)