在Angular2中跨组件共享服务类的成员变量有什么缺点吗?

时间:2017-07-07 19:58:26

标签: angular angular2-services

为了在不同组件之间同步数据,我使用单个服务对象,并将服务的某些成员变量分配给其ngOnInit回调中的组件局部变量。

使用这种方法,可以在组件视图上自动刷新数据更改,不需要某种事件订阅技术。

但我不确定这是组件交互的正确方式,还是将来会出现问题。有人请提供意见吗?

1 个答案:

答案 0 :(得分:1)

这是共享属性的有效方法。 Angular中的服务只是其给定提供者范围内的单例。但是,我会说,由于两个主要原因,这与分享属性的规范方式不匹配:

  1. 可以更改组件值,而不会在服务中反映更改
  2. 如果服务中的值引用发生更改,则不会处理更改检测
    • 作为旁注,如果使用效率更高的ChangeDetectionStrategy.OnPush策略,则对象变异也不会处理更改检测
  3. 在服务中使用Observable个对象可以帮助缓解这两个问题。例如,使用BehaviorSubject对象将允许组件更改服务提供的值(通过BehaviorSubject.prototype.next(value))并订阅服务提供的值以有效地执行更改检测(仅通过{{完成) 1}}管道在模板中)。如果需要,async个对象也可以方便地使用BehaviorSubject函数同步获取现有属性值。

    话虽如此,使用getValue()字段确实会产生额外费用,其好处取决于您的情况。我建议坚持使用KISS principle并保留你拥有的东西,直到你真正从做更复杂的事情中受益。