当模型更改时,AngularJS视图不会更新

时间:2014-10-05 07:02:43

标签: angularjs

我有一个$ rootScope变量,如下所示:

$rootScope.queue = {'A1':{'Name':'John','ID':'A1'},'A2':{'Name':'Anna','ID':'A2'}};

在我的控制器中,我有一个这样的函数,其中up​​date是来自队列的对象,包含更新的数据:

$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中,如果队列中的数据发生了变化,我的视图也会更新。我错过了什么?

1 个答案:

答案 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;