【发布时间】:2020-08-04 16:52:56
【问题描述】:
如果此问题发布在 Stack Overflow 上的某个地方,我深表歉意,但我找不到适合我的答案。
我有一个 BehaviorSubject,它以布尔值的形式跟踪状态。我还有一个公共 getter 方法,它是一个返回 BehaviorSubject 的 Observable。我这样做是为了不仅可以订阅 BehaviorSubject 值的更改,还可以在当前值未更改时获取当前值。虽然我能够从订阅中获得正确的值,但在调用 getter 时我得到了一个返回的对象。我希望它返回最后一个值。
我尝试过使用 .getValue(),它似乎不起作用,我尝试过 .value,它似乎确实有效,但在 IDE 中引发错误。
我创建了一个非常基本的示例来说明我正在尝试完成的工作,并将 cmets 放入 my.service.ts 文件中以显示我的目标。请指教。谢谢!
编辑:我默认使用堆栈闪电战中的内容,并将 getter 分配给 name 变量只是为了查看它。我的目标是获得价值,以便我可以根据价值是真还是假来做一些事情。我确定我错过了一些非常简单的东西。
编辑:根据要求向问题添加代码
编辑:我还添加了 .subscribe 以表明虽然我了解 Observables 的工作方式,但如果可能的话,我还想使用相同的 getter 检查值更改的外部值。
我的服务
import { Observable, BehaviorSubject } from "rxjs";
export class MyService {
constructor() {}
private _isBoolean = new BehaviorSubject<boolean>(false);
public get isBoolean(): Observable<boolean> {
//return this._isBoolean.value; // Returns boolean, but throws error "Type 'boolean' is not assignable to type 'Observable<boolean>'."
return this._isBoolean; // Returns object, but I want the value
}
}
应用组件
import { Component } from '@angular/core';
import { MyService } from './my.service';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name;
constructor(private _myservice: MyService) {
this._myservice.isBoolean.subscribe(val => {
console.log("value from subscribe: " + val)
})
this.name = this._myservice.isBoolean;
if (this._myservice.isBoolean) {
console.log("true!");
} else if (!this._myservice.isBoolean) {
console.log("false!");
}
}
}
【问题讨论】:
-
你应该把你的代码放在你的答案中
-
为此,需要定义新的值,如 (subjectBoolean)。并且每当向 BehaviorSubject 发出值时,将那个 subjectBoolean 值设置在一起并在 getter 方法上返回那个 subjectBoolean。
-
@Derek.W 你能举一个编码的例子吗?我不听你说的。谢谢。
-
或者你可以在MyService上得到这样的值:
this._isBoolean.getValue(),那么它就可以工作了。 -
可以直接使用BehaviorSubject,不需要使用observable。因此,最好将 BehaviorSubject 变量设为公共,并在 getIsBoolean 上仅使用
BehaviorSubject.getValue()返回 rela 布尔值
标签: angular observable getter angular9 behaviorsubject