2015-06-23 47 views
2

我正在使用离子框架在我的应用程序上实现通知功能。它的工作方式是我对返回一个通知数组的rest api发出get请求。但这似乎太多了,因为我必须每次都向同一列表发出请求,所以我想将第一个请求存储在本地变量中(使用ngStorage),并在下一个请求中提取新项目。可能?如果是的话,你可以给例如如何去有关JSON的这个AngularJS将新项目推送到GET请求上的数组

/*例1第一个请求,我会存储在$ localStorage的变量列表*/

[{id:1, notification:'notif A'}, 
{id:2, notification:'notif B'}] 

/*对于第二的要求,我只希望推得“ID:3”到我的$ localStorage的,这怎么可能*/

[{id:1, notification:'notif A'}, 
{id:2, notification:'notif B'}, 
{id:3, notification:'notif C'}] 
+0

您是否可以控制响应您请求的服务器?例如你能否在你的第二个请求中传递'...?last_id = 2 ...',并且依赖于服务器只会返回新的通知(即'{id:3,...}')的事实? – tavnab

+0

如果您不得不提出请求并检索所有数据,则没有区别.... – link64

+0

我将您的观点与Rest api设置的方式进行比较..通知/:开始/:结束 .... .....开始和结束是最后一个@ link64的第一个到最后一个 – teddybear123

回答

2

这将是最好让服务器只传给你的新通知,只要你可以通过一些请求中的信息说明你已经拥有的最新通知是什么(例如,你的请求可以包含一个查询参数,例如last_id=<id>,您的服务器用它来筛选出比它旧或更旧的通知;这假定id的值与通知年龄相关;还有其他服务器端解决方案)。

如果您无法控制服务器,最快的做法是用新列表替换整个列表。我不认为通过找到增加它们的增量&就可以获得任何东西。但是,如果您因为其他原因需要增量(例如,您需要根据其内容对每个新通知执行一些操作),则可以选择将通知存储为对象而不是数组:

// notifications are keyed by ID 
var notifications = {}; 

// load notifications from storage if needed 

// newList is the array of new notifications 
// newNotificationFcn is an optional callback function, which 
// takes the new notification as its only argument 
function updateNotifications(newList, newNotificationFcn) { 
    var doNotify = (typeof newNotificationFcn === 'function'); 
    newList.forEach(function(curr) { 
    if (!notifications.hasOwnProperty(curr.id) { 
     // this is a new notification; do something 
     if (doNotify) { 
     newNotificationFcn(curr); 
     } 
     notifications[curr.id] = curr; 
    } 
    }); 

    // store away notifications as needed 
} 

但是,这只有当你真的需要为那些三角洲做些事时,如果你需要做的只是保持你的列表是最新的,只需更换旧的。

相关问题