【问题标题】:How to create an Observable from a field如何从字段创建 Observable
【发布时间】:2019-08-23 20:06:52
【问题描述】:

我有一个名为 EditEmployee 的类,我在其中声明了一个字段:

export class EditEmployee implements OnInit {
  spaceRequirement = 0;
  ...
}

我想让 spaceRequirement 字段成为 Observable,以便在我的 ngOnInit() 函数中,我可以这样做:

export class EditEmployee implements OnInit {
  spaceRequirement = 0;
  ...
  ngOnInit() {
    this.spaceRequirement.subscribe(spaceReq => {
    //Call some function when spaceRequirement changes
  }
}

如何将spaceRequirement 字段设为 Observable,以便在该值发生变化时调用函数?

【问题讨论】:

  • 将设置器添加到您的道具。 example

标签: angular rxjs observable observer-pattern


【解决方案1】:

你可以设为BehaviorSubject

spaceRequirement = new BehaviorSubject<number>(0);

然后你可以订阅它。 如果您需要更改其值,请致电: this.spaceRequirement.next(NEW_VALUE_HERE);

【讨论】:

  • 有没有其他方法可以让 spaceRequirements 成为 observable 而无需将其实例化为 BehaviorSubject?做类似spaceRequirement.makeObservable() 然后订阅它?
  • 我不这么认为,这样你只需创建一个BehaviorSubject,它同时是一个Observable,你可以将数据传递给它。该解决方案有什么问题?
【解决方案2】:

您可以有一个 getter 和一个 setter 来访问一个行为主题并订阅该行为主题以观察变化。

spaceRequirement$ = new BehaviorSubject<number>(0);

get spaceRequirement(): number {
  return this.spaceRequirement$.value;
}

set spaceRequirement(val: number) {
  this.spaceRequirement$.next(val);
}

ngOnInit() {
  this.spaceRequirement$.subscribe(spaceReq => {
  //Call some function when spaceRequirement changes
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多