如何从AngularJS中的后续请求中正确存储本地数组

时间:2015-07-01 17:43:48

标签: javascript arrays angularjs

我希望有一个存储"最后消息的本地数组" (收件箱视图)。在我的服务中,我执行GET请求,返回如下数据结构:

[{id:1, from_user:1, to_user:2, message:"bar", has_been_read:false}, 
{id:2, from_user:3, to_user:2, message:"foo", has_been_read:false}]

服务器只发送带有has_been_read == false的最后一条消息,这是该服务的代码:

$scope.unreadMessages = []

$scope.GetUnreadMessages = function(){

      $localStorage.AllMessages.push($scope.unreadMessages)

       UserService.GetUnreadMessages()
            .success(function (data) {

              data = angular.fromJson(data);
              $scope.unreadMessages.push(data);

              }).
            error(function(error) {         
        //do something
          });
}

$scope.GetUnreadMessages()

让我们说在我给出的例子json上面我读了id:1导致,has_been_read变为true ..在下一个请求它只会返回数据id:2,这是正确的..但是我的问题是新的请求数据替换了我所有的旧数据。所以我想要发生的是,即使我读了id:1,除非我删除了它或者我有来自同一用户的新消息,我仍然希望在我发出新请求时保留它...我知道我的代码是错的我不知道如何解决这个问题..

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是保存按from_user分组的响应:

.success(function(unreadMessages){
    angular.forEach(unreadMessages, function(unreadMessage){
        // if conversation from a user exists
        if(localStorage.getItem(unreadMessage.from_user)){
            var conversation = JSON.parse(localStorage.getItem(unreadMessage.from_user));
            conversation.push(unreadMessage);
            localStorage.setItem(unreadMessage.from_user, JSON.stringify(conversation));
        } else {
            var conversation = [];
            conversation.push(unreadMessage);
            localStorage.setItem(unreadMessage.from_user, JSON.stringify(conversation));
        }
    });
})