角度数组不更新视图
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
);
;
【讨论】:
以上是关于角度数组不更新视图的主要内容,如果未能解决你的问题,请参考以下文章