在我用 Dart 编写的 Angular2 应用程序中,我有几个服务可以跟踪在视图中不一定具有任何特定关系的组件之间共享的数据。我需要任何组件发起的更新都反映在每个组件的显示中,我想要OnPush
更改检测的性能优势,我需要组件显示在创建组件之前可能已经设置的值,并且我希望完成所有这些用最少的样板。
我的研究表明 Observables 可能是我需要的,但我一直无法在几个方面找到明确的答案。
Dart 中是否有与 Angular2 配合良好的 Observable 实现?
Observable 与 Dart Stream 有什么不同吗?特别是 Observable 是否支持获取当前值以及收到有关未来更新的通知?
最后但并非最不重要的一点是,假设 Observable 满足我的要求,声明组件的 Observable String 属性、使用从注入服务中检索到的 Observable 对其进行初始化、在组件的模板中显示其值(以 pre -existing value),并且对其值的更新会自动标记组件以进行推送更改检测?
如果 Observable 对此不起作用,我应该怎么做呢?我目前的想法是使用一个自定义Stream
子类,该子类在新侦听器接收到的任何其他内容之前插入最新值,并通过async
管道发送该值以处理从流中提取值并标记以进行更改检测。
我理想的解决方案在使用中看起来像这样:
@Injectable()
class MyService {
@observable int health;
}
@Component(
...)
class MyComponent {
@observable int health;
MyComponent(MyService service) : health = service.health;
}
在模板中:
<span>{{health | async}}</span>
或者对于真正理想的情况,尽管这必须以某种方式挂钩到 Angular 的模板编译中(也许使用转换器?我还没有了解它们是如何工作的):
<span>{{health}}</span>
就这样,它就可以工作了。
我现在使用的自定义解决方案没有那么方便,但它很接近。