Javascript DOM已更新,但其视图不是’;t渲染?

Javascript DOM已更新,但其视图不是’;t渲染?,javascript,angularjs,angularjs-ng-repeat,ionic-framework,Javascript,Angularjs,Angularjs Ng Repeat,Ionic Framework,我正在尝试制作一个聊天应用程序。 我有一个函数,每当我得到一个新的msg,它就会运行,将msg添加到作用域中,这样它就会被ng repeat呈现。 函数如下所示: var gotMsg = function(message) { var msg = message.message; var name = message.name console.log('scope.messages', $scope.msgCtrl.messages); $scope.msgCt

我正在尝试制作一个聊天应用程序。 我有一个函数,每当我得到一个新的msg,它就会运行,将msg添加到作用域中,这样它就会被ng repeat呈现。 函数如下所示:

var gotMsg = function(message) {
    var msg = message.message;
    var name = message.name
    console.log('scope.messages', $scope.msgCtrl.messages);
    $scope.msgCtrl.messages[name].push({
        message: msg,
        user: name
    });

    $scope.$digest();
    //scroll to bottom
    $ionicScrollDelegate.scrollBottom(true);
我收到消息“没问题”,通过运行“ionic run android”并查看chrome inspect,我看到DOM更新为正确插入的新消息

然而!这些新消息没有正确呈现。它要么是白色的,要么是破碎的。当我向上滚动聊天记录,然后向下滚动时,它确实会显示出来。 这可能是什么原因造成的?我尝试过使用/不使用$digest/$apply/$timeout/$eval.Async等。到目前为止,没有任何效果。有什么想法吗


我找到了一种方法来正确呈现消息。 基本上需要隐藏和显示一个DOM元素,该元素将强制页面“移动”,以便重新呈现页面。 我发现元素必须引起移动,并且不能是隐藏元素。而且,它需要有一点延迟。0毫秒不起作用

$timeout(function() {

    var el = document.getElementsByClassName("nbsp")[0];
    el.style.display = 'none';

    $timeout(function() {
        el.style.display = 'block';
    }, 50);

}, 50);

$scope.$digest()仅为其子元素运行摘要循环..如果(!$scope.$$phase)$scope.$apply(),请尝试
我会试试看。。虽然我听说检查$$phase是否使用$apply不是一个好模式。嗯,我的问题不是绑定没有更新,当我使用chrome inspector检查时,它在DOM中是正确的。。为什么我的视图呈现如上所示?
$scope.$apply()
必须检查
$$phase
,其原因是,如果您直接运行apply,并且scope的阶段已经在运行摘要循环,那么它将破坏代码..并且错误将被抛出,因为
$digest
已经按照角度运行
$apply()
关于范围不是好的做法。无论何时,只要您不使用angular,比如使用任何jquery插件或任何其他javascript。或任何不带角度的异步操作。操作完成后,您有$apply()作用域。请参阅此文档
$scope.$apply(函数(){console.log('scope.messages',$scope.msgCtrl.messages);$scope.msgCtrl.messages[name].push({message:msg,user:name});})尝试此代码它应该可以工作。