angularjs – 使用基于$资源的服务的部分更新(也称为PATCH)?

前端之家收集整理的这篇文章主要介绍了angularjs – 使用基于$资源的服务的部分更新(也称为PATCH)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在使用Django / TastyPie作为后端REST服务提供商构建一个Web应用程序,并构建一个基于AngularJS的前端,对服务器上的CRUD对象使用了大量基于$资源的服务.一切工作到目前为止!

但是,当我们要仅更新对象上一个或两个更改的字段时,我们希望减少我们发货的数据量.

TastyPie使用HTTP PATCH方法支持功能.我们在对象上定义了一个.diff()方法,所以我们可以确定在进行更新时我们想要发送哪些字段.我找不到任何关于如何定义/实现$资源返回的实例对象上的方法来做任何文档.

我们要做的是向对象实例(as described in the Angular.js documentation here)添加另一种方法,像myobject.$partialupdate(),它将:

>调用我们的.diff()函数来确定要发送哪些字段,然后
>使用HTTP PATCH请求仅将这些字段发送到服务器.

到目前为止,我找不到任何文档(或其他SO文章)描述如何做到这一点,但真的很感谢任何人可能有任何建议.

谢谢.

我们实现了$patchusing ngResource,但它有一点涉及(我们在服务器端使用Django Rest Framework).对于您的差异组件,我将离开您自己的实现.我们使用一个原始的缓存来跟踪资源的变化,所以我可以轮询一个给定的对象,看看什么(如果有的话)已经改变了.

我利用下划线的_.pick()方法来拉取已知的字段来保存现有的实例,创建一个副本(连同已知的主键)并使用$patch保存.

我们还使用一些实用程序类来扩展内置资源.

app.factory 'PartUpdateMixin',['$q','_',($q,_) ->

    PartUpdateMixin = (klass) ->
        partial_update: (keys...) ->
            deferred = $q.defer()
            params = _.pick(@,'id',keys...)
            o = new klass(params)
            o.$patch(deferred.resolve,deferred.reject)
            return deferred.promise
]

以下是实用程序类来增强资源.

app.factory 'extend',->
    extend = (obj,mixins...) ->
        for mixin in mixins
            obj[name] = method for name,method of mixin
        obj

app.factory 'include',['extend',(extend) ->
    include = (klass,mixins...) ->
        extend klass.prototype,mixins...

    return include
]

最后,我们可以增强我们的资源

include TheResource,PartUpdateMixin(TheResource)
resourceInstance = TheResource.get(id: 1234)
# Later...
updatedFields = getChangedFields(resourceInstance)
resourceInstance.partial_update(updatedFields...)
原文链接:https://www.f2er.com/angularjs/140469.html

猜你在找的Angularjs相关文章