我有一个$ rootScope变量,如下所示:
$rootScope.queue = {'A1':{'Name':'John','ID':'A1'},'A2':{'Name':'Anna','ID':'A2'}};
在我的控制器中,我有一个这样的函数,其中update是来自队列的对象,包含更新的数据:
$scope.onMessage = function(update) {
angular.extend($rootScope.queue[update['ID']], update);
};
最近的数据来自外部应用程序,该应用程序使用Google Channel API将数据发送到我的应用程序。以下是同一控制器中的代码:
channel = new goog.appengine.Channel('<?php echo $token ?>');
socket = channel.open();
socket.onmessage = $scope.onMessage;
我的问题是,如果我在我的视图中查看队列中的某个人,例如John和我收到了像(名字更正)这样的更新:
{'Name':'Jon','ID':'A1'}
$ rootScope.queue已正确更新,但我的视图未更新,除非我重新点击此人。
对于我的观点,我有类似的东西(setActive()将一个名为active的$ scope变量设置为ID):
<div ng-controller="queueController">
<div name="people" ng-model="people">
<div ng-repeat="people in queue" ng-click="setActive(people.ID)">{{ people.Name }}</div>
</div>
<div ng-model="queue">You clicked {{ queue[active].Name }}</div>
</div>
据我所知,在AngularJS中,如果队列中的数据发生了变化,我的视图也会更新。我错过了什么?
答案 0 :(得分:0)
我认为问题在于使用ng-model =&#34; queue&#34;正在创建$ scope.queue而不是使用$ rootScope.queue
要解决这个问题,我可以像这样定义队列:
<div class="front" style="height: 820px; width: 820px; vertical-align: middle;" >
<div class="inner" style="float:none; margin:0 auto;">
<img src="http://www.codeproject.com/KB/GDI-plus/ImageProcessing2/img.jpg"/>
</div>
</div>
然后使用ng-model =&#34; myapp.queue&#34;