【发布时间】:2015-02-28 00:26:58
【问题描述】:
我有一个 AngularDart 应用程序正在运行,但我觉得我做错了......
应用程序在收到事件时显示事件列表。事件通过 SignalR 到达应用程序,但我认为这并不重要 - 问题是我必须更新组件的状态才能看到状态的变化显示在页面上。
这是我的组件的精简版:
@Component( selector: 'liveEvents', templateUrl: 'live_events.html', useShadowDom: false )
class LiveEvents implements ScopeAware {
VmTurnZone _vmTurnZone;
EventReceiver _eventReceiver;
LiveEvents( this._vmTurnZone, this._eventReceiver );
List<Event> events = new List<Event>();
void _onEventReceived(Event event) {
//TODO: This just does not seem right...
_vmTurnZone.run(() => events.add(event));
}
void set scope(Scope scope) {
var _events = _eventReceiver.subscribeToAllEvents( "localhost", _onEventReceived );
}
}
EventReceiver 类负责连接到 SignalR 服务器,从该服务器接收消息并将它们转换为事件对象,然后调用 subscribeToAllEvents 中指定的任何函数(在本例中为 _onEventReceived)
angular模板html很简单:
<ul>
<li ng-repeat="event in events">Event: {{event.Id}}</li>
</ul>
这一切都很好,但我不喜欢的一点是必须将 VmTurnZone 对象注入到组件中,并且必须在对 run 的调用中更新事件属性 VmTurnZone .这对我来说似乎有点过于复杂。但是,如果我不在 VmTurnZone.run 方法中执行此操作,则当 events 属性更新时,视图不会更新以反映该更改。只有在VmTurnZone.run 内才能工作。
有没有更简单的方法来做我在这里追求的事情?我已经考虑将手表添加到范围,但这似乎不起作用(在我看来,它应该用于以相反方式发生的更改 - 即,视图更新范围,并且你想要发生这种情况时做点什么)。
任何 AngularDart 专家都可以告诉我是否有更好的方法来做我所追求的吗?
【问题讨论】:
标签: dart angular-dart