2016-08-23 94 views
1

內部控制器我有這樣的代碼:

$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

回答

2

你可以嘗試添加$ apply()嗎?

我面臨同樣的問題,它解決了我的問題。

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

我不確定它是否正確,但您可以試一試。

+0

內,但爲什麼它的發生一樣,只是增加了$範圍,如果你改變你需要一個事件裏面的數據應該更新數據 – manish

+0

@manish通常$ apply() – gyc

+0

添加到@gyc聲明的內容中,$ apply計算表達式並觸發摘要循環,使Angular執行所有註冊的監聽器並更新任何視圖綁定。 –

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