$范围数组不会得到更新

问题描述:

内部控制器我有这样的代码:

$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中

+0

你在哪里添加?\ – Sajeetharan

+0

控制器 – manish

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

我面临同样的问题,它解决了我的问题。

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

我不确定它是否正确,但您可以试一试。

+0

内,但为什么它的发生一样,只是增加了$范围,如果你改变你需要一个事件里面的数据应该更新数据 – manish

+0

@manish通常$ apply() – gyc

+0

添加到@gyc声明的内容中,$ apply计算表达式并触发摘要循环,使Angular执行所有注册的监听器并更新任何视图绑定。 –

使用$ 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(); 
      } 
     } 
    });