Angular 如何更改可观察对象的属性。角度2/行为主体

Angular 如何更改可观察对象的属性。角度2/行为主体,angular,rxjs,Angular,Rxjs,我有一个Person类型的对象,它有firstName、lastName和age字段。我使用行为主题检测任何变化。我有一个观察组件,它订阅了这个Person对象的每个更改。一旦变化检测到,观察组件将调用一个方法。我希望此方法更改可观察的Person对象的属性 为我效劳 export class PersonService { personToCopySource = new BehaviorSubject<Person>(null); personToCopy =

我有一个Person类型的对象,它有firstName、lastName和age字段。我使用行为主题检测任何变化。我有一个观察组件,它订阅了这个Person对象的每个更改。一旦变化检测到,观察组件将调用一个方法。我希望此方法更改可观察的Person对象的属性

为我效劳

export class PersonService {

    personToCopySource = new BehaviorSubject<Person>(null);
    personToCopy = this.personToCopySource.asObservable();

当我改变观察对象的属性时,我得到了这个错误。类型Observable上不存在“Property”firstName,Observable是一个流。它没有属性。你想做什么?是否要在更新了
firstName
的情况下将自己的值放入流中?在这种情况下,您可以尝试
Subject\next

export class PersonService {

  personToCopySource = new BehaviorSubject<Person>(null);
  personToCopy = this.personToCopySource.asObservable();

  // Provide a method to update a person,
  // by putting a new or updated person on the stream.
  update(person: Person) { 
    this.personToCopySource.next(person); 
  }

一条可观测的河流就是一条小溪。它没有属性。你想做什么?你想把你自己的价值放在流上吗?在这种情况下,您可以尝试
Subject 35; next
。最初,我在服务中有一个person类型的变量person。我想要的是检测这个对象属性的任何变化。是否有其他方法可以检测服务中声明的变量的变化。?我对服务中的更新方法有一个问题。更新person C将表示一个新的person对象并替换以前的person对象,还是相同的person对象并仅更新firtsName属性?@ilovejavaAJ您需要了解溪流。流是一系列的事物。他们一个接一个地来了。你不能改变它们。您可以使用
subscribe
从流中读取内容,也可以使用
next()
在流中放置新内容。在流中放置一个新项目并不是“替换”任何东西:它只是在流中放置一个新项目。流中的新项目可能是上一个项目的修改版本,但这并不意味着它“更新”上一个项目,该项目可能已经在其原始状态下进行了处理。@ilovejavaAJ,如何将“this.personService”对象更新为null?在我的例子中,单击按钮后,我需要重置值。你知道吗?
export class PersonService {

  personToCopySource = new BehaviorSubject<Person>(null);
  personToCopy = this.personToCopySource.asObservable();

  // Provide a method to update a person,
  // by putting a new or updated person on the stream.
  update(person: Person) { 
    this.personToCopySource.next(person); 
  }
export class ObservingComponent {

    constructor(public person: Person) {}

    ngOnInit(){
        this.personService.personToCopy.subscribe(
            data=> {
                this.updateMethod(data)
            })
    }

    updateMethod(data){
        this.personService.update({...data, firstName: 'updated First Name'});
    }