我希望有一个存储"最后消息的本地数组" (收件箱视图)。在我的服务中,我执行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,除非我删除了它或者我有来自同一用户的新消息,我仍然希望在我发出新请求时保留它...我知道我的代码是错的我不知道如何解决这个问题..
答案 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));
}
});
})