Angular2省道用于在使用WebSocket时不更新视图
我的angular2组件有问题。当我使用WebSocket时,视图不会更新。我尝试过http请求,但效果很好,但我需要更新视图中的数据 我可以使用WebSocket连接到服务器,并且可以接收数据,但是我的视图不会更新Angular2省道用于在使用WebSocket时不更新视图,websocket,angular,dart,dart-html,Websocket,Angular,Dart,Dart Html,我的angular2组件有问题。当我使用WebSocket时,视图不会更新。我尝试过http请求,但效果很好,但我需要更新视图中的数据 我可以使用WebSocket连接到服务器,并且可以接收数据,但是我的视图不会更新 @Component( selector: "pv-table", templateUrl: "./table.component.html" ) class TableComponent { WebSocket _connection; // NgZone _
@Component(
selector: "pv-table",
templateUrl: "./table.component.html"
)
class TableComponent
{
WebSocket _connection;
// NgZone _zone;
// ApplicationRef _application_ref;
List data;
TableComponent(/* this._zone, this._application_ref */)
{
_connection = new WebSocket( "ws://${HOST}:${PORT}" );
_connection.onOpen.first.then( ( _ ) {
_connection.onMessage.listen( ( MessageEvent e ) => OnMessage( e.data ) );
// A simple class that gives my application a standard
// way to communicate.
Packet request = new Packet()
..message = "table.get"
..data = {};
_connection.send( JSON.encode( request ) );
_connection.onClose.first.then( ( _ ) { });
});
}
void OnMessage( String data )
{
Map res = JSON.decode( data );
String cmd = res[ "message" ];
Log.Info( cmd );
switch( cmd )
{
case "table.send":
// Setting the data here. This works
data = res[ "data" ];
// This prints the correct data in the developer console.
Log.Info( data );
// Neither of these help.
// _zone.run( () => data = res[ "data" ] );
// or
// _application_ref.tick();
break;
default:
Log.Warn( "Unknown command: $cmd" );
break;
}
}
}
我在谷歌上搜索了一下,发现了一些类似这样的问题,即使用NgZone.run(…)
或ApplicationRef.tick()
强制执行更改检测,但这没有帮助。要么它们不适合这种情况,要么我不知道如何使用它们
我的模板如下所示:
<p *ngFor="let person of data">
<span scope="row">{{ person[ "_id" ] }}</span>
<span>{{ person[ "name" ] }}</span>
<span>{{ person[ "job" ] }}</span>
<span>{{ person[ "date_due" ] }}</span>
</p>
{{person[“{id]}}
{{person[“name”]}
{{person[“job”]}
{{人[“到期日期”]}
正如评论中提到的那样。我可以在开发人员控制台中看到正在打印的数据。它的格式是正确的,一个包含正确字段的地图列表,但页面仍然是空白的。结果证明我真的非常愚蠢 让我们看一些东西好吗 处理传入数据的方法的签名:
void OnMessage(字符串数据)
我试图在模板中使用的成员:
列表数据代码>
OnMessage
方法中的赋值:
data=res[“data”]代码>
注意到什么奇怪的事了吗?
可能类成员和方法参数具有相同的名称?
也许这意味着参数正在跟踪成员?
也许这意味着对该名称的赋值实际上是对参数的赋值,而不是对成员的赋值
最糟糕的是,我已经在这里坐了将近两个小时,试图找出问题所在
换两行,一切正常
void-OnMessage(字符串数据)
=>void-OnMessage(字符串响应数据)
Map res=JSON.decode(数据)代码>=>Map res=JSON.decode(响应数据)代码>