2014-03-18 47 views
0

我有一個存儲需要被顯示給用戶,這樣更新NG-重複時,在服務更新

app.controller('messageCtrl', function($scope, messages){ 
    //what to do 
}); 

app.factory('messages', function(){ 
    return { 
     messages: [ 
      {type:'info', text: 'info Message'}, 
      {type:'success', text: 'success Message'}, 
      {type:'warning', text: 'warning Message'}, 
      {type:'danger', text: 'danger Message'} 
     ], 

     addMessage: function(message){ 
      messages.push(message); 
     }, 

     getMessages: function(){ 
      return messages; 
     } 
    }; 
); 

什麼,我需要在我的控制器做可以任何消息的消息業務數據ng-重複消息的內容,並在每當另一個控制器添加消息時更新它?

回答

0
app.controller('messageCtrl', function($scope, messages){ 
    $scope.localMessages = messages.messages; 
    //Just be sure to not replace the original array and this will work 
    //if you need to repopulate the array or empty it use angular.copy() 
}); 

app.factory('messages', function(){ 
    return { 
     messages: [ 
      {type:'info', text: 'info Message'}, 
      {type:'success', text: 'success Message'}, 
      {type:'warning', text: 'warning Message'}, 
      {type:'danger', text: 'danger Message'} 
     ], 

    addMessage: function(message){ 
     messages.push(message); 
    }, 

    getMessages: function(){ 
     return messages; 
     } 
    }; 
); 
+0

我覺得很愚蠢,忘記數組是通過引用傳遞而不是複製。所以只要我的原始數組沒有被銷燬或替換,任何更新都應該在副本上可見。 – FreakinaBox

+0

容易忘記,控制器上的範圍上的手錶應該看到變化,儘管如您所說,只要同一個對象被保留並且不會在服務中被替換(這是很多人偶然發現的另一個問題)。 – shaunhusain