【发布时间】:2016-03-08 22:59:13
【问题描述】:
在我用 Dart 编写的 Angular2 应用程序中,我有几个服务可以跟踪在视图中不一定具有任何特定关系的组件之间共享的数据。我需要任何组件启动的更新都反映在每个组件的显示中,我想要OnPush 更改检测的性能优势,我需要组件显示在创建组件之前可能已经设置的值,我想要所有这些用最少的样板来完成。
我的研究表明 Observables 可能是我需要的,但我一直无法在几个方面找到明确的答案。
在 Dart 中是否有与 Angular2 配合良好的 Observable 实现?
Observable 与 Dart Stream 有什么不同吗?特别是 Observable 是否支持获取当前值以及收到有关未来更新的通知?
最后但同样重要的是,假设 Observable 满足我的要求,声明组件的 Observable String 属性、使用从注入服务检索的 Observable 对其进行初始化、在组件的模板中显示其值(开始具有预先存在的值),并且对其值的更新会自动标记组件以进行推送更改检测?
如果 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>
只有这样,它就可以工作了。
我现在使用的自定义解决方案没有那么方便,但很接近。
【问题讨论】:
标签: dart angular observable angular2-changedetection