我可以仅使用一个更新的字段将对象发射到流中吗?

Can I emit object to stream with only one updated field?

我有一个行为主题,它是我服务中的私有字段

private data = new BehaviorSubject<Email>({
    body: '',
    email: ''
});

我可以创建仅更新电子邮件对象的一个​​字段并将其发送到流的方法吗?是这样的吗?

setBody(inputBody: string) {
    this.data.next({body: inputBody});
}

这里的问题是我需要保持其他字段不变。可能吗? 也许可以创建一个 'generic' 方法来按名称更新任何字段?

您必须获取 BehaviorSubject 的当前值,然后更新您的特定 属性

setBody(inputBody: string) {
    const content = this.data.getValue()
    this.data.next({...content, body: inputBody});
}

通用字段Setter:

#1 使用行为主体的 .getValue()


setField(field: string, payLoad: any) {
  this.data.next({
    ...this.data.getValue(), 
    [field]: payLoad
  });
}

#2 使用任何 observable 的下一个值

这里,this.data不需要是BehaviorSubject


setField(field: string, payLoad: any) {
  this.data.pipe(
    take(1),
    map(curr => ({...curr, [field]: payLoad}))
  ).subscribe(this.data.next.bind(this.data));
}