我有一个控制器,通过rest读取数据并将其显示在表中-这部分工作正常。另外,我添加了一个WebSocket,并希望更新表,如果WebSocket接收到数据。代码如下:
app.controller('allBookingsCtrl', function($scope, $http, currentUser){
$scope.bookingsList = [];
var ws = new WebSocket(wsRootUrl + '/allbookings');
ws.onmessage = function(message){
$scope.$apply(function(){
$scope.bookingsList = message.data;
alert(message.data);//displays correct data!
});
};
$http.get(rootUrl + '/timetracker/booking/all').success(function(response) {
$scope.bookingsList = response;
});
});
问题是在apply调用时表没有更新。我调试并可以通过更改来自另一个浏览器的数据来触发onmessage
。数据的内容也是正确的,不会抛出错误。
那么如何用websocket接收到的数据更新表/作用域?
这里是html:
<table ng-controller="allBookingsCtrl" class="table">
<thead>
<tr>
<th>#</th>
<th>user</th>
<th>project</th>
<th>start</th>
<th>end</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="booking in bookingsList">
<td>{{$index + 1}}</td>
<td>{{booking.usersProjects.user.name}}</td>
<td>{{booking.usersProjects.project.name}}</td>
<td>{{booking.start | date:'yyyy-MM-dd HH:mm:ss' }}</td>
<td>{{booking.end | date:'yyyy-MM-dd HH:mm:ss' }}</td>
</tr>
</tbody>
</table>
小编辑:如果我在消息末尾添加alert(data);
,我将看到具有正确数据的警报!所以只有列表的应用程序不能正常工作。
添加plunkr 我试着在plunkr中重现这个,没有websocket -试图在ng-click上获得更新。但是这也不工作-这里的点击没有做任何事情
你能改变这一行吗
$scope.bookingsList = data;
$scope.bookingsList = message.data;