2015-10-19 29 views
0

我試圖建立使用離子框架簡單的移動消息傳送應用程序的圖。有兩個視圖,一個用於消息,另一個用於請求。當一個請求被接受時,用戶應該從請求視圖(和請求列表)中被移除並移動到消息視圖(並被推送到消息列表)。更新跨兩個不同的控制器

有兩個控制器,RequestCtrl和MessageCtrl。在視圖中接受請求時,RequestCtrl將用戶從請求列表中刪除,並將用戶添加到MessageCtrl中的消息列表中。到目前爲止,這已經通過創建一個Angular服務來完成:

app.factory('$chats', ['$localstorage', '$http', '$rootScope', 
function($localstorage, $http, $rootScope) { 
    return { 
     refresh: function() { 
      var messages = []; 
      var user = $localstorage.getObject('user'); 
      console.log("message before user"); 
      console.log(user); 
      for (var i = 0; i < user.interactions.length; i++) { 
       if (user.interactions[i].isConnected == "connected") { 
        var friend = user.interactions[i].user_id; 
        $http.get('/get_profile?id=' + friend).then(function(resp) { 
         messages.push({ 
          "_id": resp.data._id, 
          "profileImg": resp.data.profileImg, 
          "firstName": resp.data.firstName, 
          "lastName": resp.data.lastName, 
          "lastMessage": "This is placeholder text" 
         }); 
        }); 
       } 
      } 
      // $rootScope.$broadcast("chatsUpdated"); 
      return messages; 
     } 
    } 
} 

但是,當列表更新時,視圖不會更新。我已經嘗試在調用服務時使用$ emit和$ broadcast推出一個事件,並在MessageCtrl中用$ on捕獲它,但它似乎沒有更新。

我很新的角度,所以我可能失去了一些東西,但我真的很感激,如果有人能在正確的方向指向我!

+0

可以請你太也張貼在這裏的''MessageCtrl代碼。 –

回答

0

編輯開始:

假設你有你的控制器$scope.messages = $chats.refresh() ...

編輯結束:

您的問題可能是你創建並返回一個新的數組var messages = []。 Angular仍然監視之前生成的數組,並且永遠不會意識到這些更改。

只要傳遞原始陣列refresh(messages)並用messages.length = 0清空陣列。這將保持您附加到範圍的原始數組。

+0

你的回答非常含糊。您在所提供的代碼中沒有看到任何觀察者,因此您的答案應該是答案而不是假設。詢問詳細信息,當你確定後,發佈答案。 –

+0

我剛剛編輯了代碼以包含一個假設。但是:如果角正在觀看消息數組,則給定的代碼必須失敗。 –

+0

現在比較好。同意,但我們需要查看MessageCtrl以找出問題所在。 –