【问题标题】:Prevent $resource.$save() from altering resource data AngularJS防止 $resource.$save() 改变资源数据 AngularJS
【发布时间】:2016-11-01 10:47:48
【问题描述】:

在下面的示例中,我对从 API 检索到的资源进行了一些转换。

var resource = $resource('http://example.com/resource/:id');

$scope.record = resource.get({id: 123});

$scope.record.$promise.then(function(response) {
   // do some transformations
   response.date = moment(response.date, "YYYY-MM-dd").format("dd MM YYYY");
});

以同样的方式,我在数据保存之前对其进行转换。

var record.$save();

我提交的 POST 数据由 API 返回。该返回值成为 Resource 对象的新值。

但是,这不是我在显示时使用的格式,如 GET 所示。

有没有办法防止 $save() 替换 Resource 的值?

【问题讨论】:

    标签: angularjs angularjs-resource


    【解决方案1】:

    向 ngResource 添加一个选项以禁用此行为是一个未解决的问题 (#8370)。

    同时,在save 操作定义中使用transformResponse 选项:

    app.factory('Things', ['$resource', function($resource) {
        var transform = function(data, headersGetter) {
            data.date = moment(response.date, "YYYY-MM-dd").format("dd MM YYYY");
            return data;
        };
    
        return $resource('/thing/:id', {}, {
            'get': {
                'transformResponse': transform
            },
            'save': {
                'transformResponse': transform
            }
        });
    }]);
    

    见:https://docs.angularjs.org/api/ngResource/service/$resource

    【讨论】:

    • save() 是服务方法,$save() 是实例方法,即 Things.save(thing) vs thing.$save()。
    • 发布的原始示例中存在错误,这就是它不起作用的原因。在有人评论我的编辑后会投票。
    猜你喜欢
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多