角度数组不更新视图

Posted

技术标签:

【中文标题】角度数组不更新视图【英文标题】:Angular array not updating view 【发布时间】:2015-01-07 14:22:24 【问题描述】:

我正在使用 angularJs、socketIo 实现一个聊天模块。 (以及用于后端的 nodeJS)。

在角度有一个数组附加到范围:$scope.messages。 对于聊天客户端,所有消息都被推送到此数组中,并使用 ng-repeat 在视图中呈现此数组。

<div class="chat-window">
    <div class="chat-message" ng-repeat="message in messages track by $index">message        </div>
</div>

但是,当我将元素推入“消息”数组时,它不会被渲染,除非有按键或鼠标事件。我已经检查过,没有按键或鼠标事件侦听器。该视图现在以某种方式自动更新。

有人可以建议我这个问题吗?

【问题讨论】:

你能贴出你的控制器代码吗? 尝试在将元素推入$scope.messages 数组后运行$scope.$apply() 【参考方案1】:

我认为您已经使用 ajax 推送数据。

jQuery ajax 没有 Angular 的能力,你需要像下面这样包装,它会告诉 $scope.message 也将更新和更新视图..

推送数据后尝试应用...

$scope.$apply(function()
    $scope.message= data;
);

【讨论】:

【参考方案2】:

以下代码对我有用,每当您从套接字收到新消息时,您只需在 $scope.$apply() 函数中绑定您的(与 UI 更新相关的)代码

 socket.on = function (e) 

            $scope.$apply(function () 

                //user code to update UI

            );

        ;

【讨论】:

以上是关于角度数组不更新视图的主要内容,如果未能解决你的问题,请参考以下文章

角度视图不更新数据

值更改时角度组件不更新

更新视图角度的值

如何仅在数据库发生更改时更新角度视图

更新角度变量后,视图不会在移动应用程序上更新,尽管它适用于浏览器

如果 id 匹配,角度 ngrx 存储更新数组项