$ scope数组未更新

时间:2016-08-23 02:29:28

标签: angularjs ionic-framework

在控制器内我有这段代码:

$rootScope.$on('chat_contact', function(event, data) {          
            var message = data.message;
            if(data.key === 'IM_MSG') {
                console.log("chat_contact.........");
                var contact = $scope.contacts[message.sndrId];
                if(contact) {
                    contact.lastMsg = message.text;
                    contact.sndrName = message.sndrName;
                } else {
                    $scope.contacts[7] = {
                        'lastMsg': message.text,
                        'sndrName': message.sndrName 
                    }
                }
            }
        });

这是我的HTML代码:

    <li class="item item-avatar item-icon-left1 item-icon-right" ng-repeat="(id, contact) in contacts" ui-sref="app.chat-single" on-hold="moreOptions('{{id}}')">
      <img src="venkman.jpg">
      <h2>{{contact.sndrName}}</h2>
      <p><span class='margin-l-10'>{{contact.lastMsg}}</span></p>

问题是

$scope.contacts[7] = {
  'lastMsg': message.text,
  'sndrName': message.sndrName 
}

正在向contacts添加一个新的输入,但它没有在html中呈现

2 个答案:

答案 0 :(得分:2)

您可以尝试添加$ apply()吗?

我遇到了同样的问题,它解决了我的问题。

$scope.$apply(function(){
    $scope.contacts[7] = {
    'lastMsg': message.text,
    'sndrName': message.sndrName 
    }
});

我不确定它是否正确,但你可以尝试一下。

答案 1 :(得分:1)

使用$ scope。$ apply();循环执行后

$rootScope.$on('chat_contact', function(event, data) {          
        var message = data.message;
        if(data.key === 'IM_MSG') {
            console.log("chat_contact.........");
            var contact = $scope.contacts[message.sndrId];
            if(contact) {
                contact.lastMsg = message.text;
                contact.sndrName = message.sndrName;
            } else {
                $scope.contacts[7] = {
                    'lastMsg': message.text,
                    'sndrName': message.sndrName 
                }
            $scope.$apply();
            }
        }
    });