angular - 没有可观察对象的服务

标签 angular rxjs observable rxjs-observables

我很难理解,为什么我需要使用 observable。 我有一个非常简单的商店,如下所示

@Injectable({
  providedIn: 'root'
})
export class DataService {   

  private readonly personData: Person   = new Person();
  constructor() {
  }

  public getPerson():Person{
    return this.personData;
  }    
  public setAge(age:number){
    this.personData.age = age;
  }
}

如果我使用 observable,上述服务工作得很好并且完全一样

@Injectable({
  providedIn: 'root'
})
export class DataService {

  // @ts-ignore
  private readonly personData: BehaviorSubject<Person> = new BehaviorSubject<Person>({});

  public personData$: Observable<Person> ;

  constructor() {
    this.personData$ = this.personData.asObservable();
  }

  public getPerson():Person{
    return this.personData.getValue();
  }

  public setAge(age:number){
    this.getPerson().age = number;
  }
}

我的问题是,为什么我要使用 observable ,简单的服务属性工作得很好! 或者我错过了大局!请帮助我理解。

最佳答案

当您想与多个组件共享相同的数据时,Observables 很有用,因为它们都可以订阅相同的源并不断获取最新的更新数据。对于基本用例,这似乎没什么用,但在大型项目中肯定有用。

在使用 OnPush 检测策略优化 Angular 的变化检测时,它们也非常有用。可观察对象可以告诉 View 它已更新,因此 View 也应该更新。 Async pipe

因此,如果您没有使用 OnPush 检测策略,或者您的项目的功能非常基础,您可能真的不需要 observables,但因为它们非常有用,并且老实说,有点难用,如果只是为了学习,我会说无论如何都要使用它们。它们为您提供了一种思考事物的新方式。 查找“响应式编程”。

关于angular - 没有可观察对象的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63321727/

相关文章:

html - 如何使用自定义 .png-Images 而不是按钮的 mat-icons?

angular - 无法在angular7 ng-select中使用ngModel设置所选项目值

javascript - .asObservable 不想与 Observable.forkJoin 一起工作

angular - 如何在 Angular 4 中初始化表单组?

angular - 监视返回可观察对象的函数

angular - 尽管主题接下来调用,但指令订阅不会触发

javascript - Angular 4预定表格自动保存

JavaFX SimpleObjectProperty<T> 与 SimpleTProperty

android - 使用 RX 进行调用,然后根据第一次调用的结果进行多个并行调用

javascript - 如何通过拖放重新排序 4 个 div(使用 angular2/4)?