我如何从一个可观察的对象中获得当前值而不订阅它?我只想要当前值一次,而不是新值.

推荐答案

你需要用BehaviorSubject

  • BehaviorSubject与ReplaySubject类似,只是它只记得上一次发布的内容.
  • BehaviorSubject还要求您为其提供默认值T.这意味着所有订阅者将立即收到一个值

它将为您提供《观察者报》发布的最新值.

BehaviorSubject提供一个名为valuegetter属性来获取传递给它的最新值.


StackBlitz

  • 在本例中,值"a"被写入控制台:

//Declare a Subject, you'll need to provide a default value.
const subject: BehaviorSubject<string> = new BehaviorSubject("a");

用法:

console.log(subject.value); // will print the current value

隐藏主题,只expose 其价值

如果您想隐藏您的BehaviorSubject而只公开它的值,比方说对服务公开,您可以使用这样的getter.

export class YourService {
  private subject = new BehaviorSubject('random');

  public get subjectValue() {
    return this.subject.value;
  }
}

Angular相关问答推荐

如何在Angular应用程序部署中安全地管理环境变量

导入浏览器模块时出错已导入commonModule的insted,animationBrower也显示错误,当p打开时

RXJS运算符用于combineLatest,不含空值

Angular 15:将数据从主零部件传递到辅零部件

Angular-每2个流式传输多个HTTP调用

使用 Electron 打包器打包 Electron Angular 应用程序时无法加载资源

由于ngcc操作失败,Angular扩展可能无法正常工作

错误:在工作区外运行 Angular CLI 时,此命令不可用

Angular 项目构建仅在 GitHub Actions 上失败

多个 Mat Paginator 在 Angular 组件中不起作用

无法卸载 angular-cli

取消订阅服务中的http observable

在 Angular 4 中播放声音

Angular 2 单元测试 - @ViewChild 未定义

为什么用?模板绑定中的运算符?

如何在Angular中使用带有 td 属性 colspan 的属性绑定?

如何导航到同级路由?

ng build 时超出调用重试次数异常

Firebase 查询子项的子项是否包含值

ngIf - 判断后表达式已更改