gpt4 book ai didi

dart - 通过 SignalR 加载数据时在 AngularDart 中重新绑定(bind)页面

转载 作者:行者123 更新时间:2023-12-03 03:02:30 27 4
gpt4 key购买 nike

我有一个正在运行的 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)

角度模板 html 非常简单:

<ul>
<li ng-repeat="event in events">Event: {{event.Id}}</li>
</ul>

这一切都很好,但我不喜欢的一点是必须注入(inject) VmTurnZone对象到组件中,并且必须从对 run 的调用中更新 events 属性在那 VmTurnZone .这对我来说似乎有点过于复杂。但如果我不这样做 VmTurnZone.run方法,当 events 属性更新时, View 不会更新以反射(reflect)该更改。仅来自 VmTurnZone.run 内部行得通吗?

有没有更简单的方法来做我在这里追求的事情?我已经考虑将 watch 添加到范围,但这似乎不起作用(在我看来,它应该用于以相反方式发生的更改 - 即, View 更新范围,并且您想要发生这种情况时做某事)。

任何 AngularDart 专家都可以告诉我是否有更好的方法来做我所追求的吗?

最佳答案

https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:async.Stream

您可以将事件添加到流中,然后监听这些事件,信号器将看到这些更改,例如:

@Component( selector: 'liveEvents', templateUrl: 'live_events.html', useShadowDom: false )
class LiveEvents implements ScopeAware {
EventReceiver _eventReceiver;
LiveEvents( this._eventReceiver );
List<Event> events = new List<Event>();

void set scope(Scope scope) {
subscribe().listen((event){
events.add(event);
});
}

Stream<Event> subscribe(){
var streamController = new StreamController<Event>();

_eventReceiver.subscribeToAllEvents( "localhost", (event){
streamController.add(event);
});

return streamController.stream;
}
}

关于dart - 通过 SignalR 加载数据时在 AngularDart 中重新绑定(bind)页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28516009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com