为了在不同组件之间同步数据,我使用单个服务对象,并将服务的某些成员变量分配给其ngOnInit回调中的组件局部变量。
使用这种方法,可以在组件视图上自动刷新数据更改,不需要某种事件订阅技术。
但我不确定这是组件交互的正确方式,还是将来会出现问题。有人请提供意见吗?
答案 0 :(得分:1)
这是共享属性的有效方法。 Angular中的服务只是其给定提供者范围内的单例。但是,我会说,由于两个主要原因,这与分享属性的规范方式不匹配:
ChangeDetectionStrategy.OnPush
策略,则对象变异也不会处理更改检测 在服务中使用Observable
个对象可以帮助缓解这两个问题。例如,使用BehaviorSubject
对象将允许组件更改服务提供的值(通过BehaviorSubject.prototype.next(value)
)并订阅服务提供的值以有效地执行更改检测(仅通过{{完成) 1}}管道在模板中)。如果需要,async
个对象也可以方便地使用BehaviorSubject
函数同步获取现有属性值。
话虽如此,使用getValue()
字段确实会产生额外费用,其好处取决于您的情况。我建议坚持使用KISS principle并保留你拥有的东西,直到你真正从做更复杂的事情中受益。