AngularJS视图在模型更改时不更新
我有一个$rootScope变量,如下所示:AngularJS视图在模型更改时不更新,angularjs,Angularjs,我有一个$rootScope变量,如下所示: $rootScope.queue = {'A1':{'Name':'John','ID':'A1'},'A2':{'Name':'Anna','ID':'A2'}}; 在我的控制器中,我有一个类似这样的函数,其中更新是队列中包含最新数据的对象: $scope.onMessage = function(update) { angular.extend($rootScope.queue[update['ID']], update); }; 最
$rootScope.queue = {'A1':{'Name':'John','ID':'A1'},'A2':{'Name':'Anna','ID':'A2'}};
在我的控制器中,我有一个类似这样的函数,其中更新是队列中包含最新数据的对象:
$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;
$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中,如果队列中的数据发生变化,我的视图也会更新。我遗漏了什么?我认为问题在于使用ng model=queue创建了$scope.queue,而不是使用$rootScope.queue 为了解决这个问题,我可以这样定义队列:
$rootScope.myapp.queue = {'A1':{'Name':'John','ID':'A1'},'A2':{'Name':'Anna','ID':'A2'}};
然后使用ng model=myapp.queue是否尝试运行rootscope.$apply@Beri何时何地运行此功能?@Craig在onMessage中,在您修改AngularJS后面的范围后。阅读它的文档:@JBNizet谢谢你的帮助。我如何修改AngularJS后面的范围?该代码位于控制器功能中。是因为我在使用angular.extend吗?如果是这样的话,我该如何做才能让AngularJS自动获取更改?您在事件发生后修改对象,而AngularJS没有意识到谷歌频道消息不是由AngularJS处理的。因此Angular无法知道对象已被修改,因此不会重新计算视图中使用的所有表达式。所有这些都在文档中进行了解释。
$rootScope.myapp.queue = {'A1':{'Name':'John','ID':'A1'},'A2':{'Name':'Anna','ID':'A2'}};