在不调用服务器的情况下初始化角度资源对象实例

时间:2013-06-25 10:04:50

标签: caching angularjs angular-resource

Backbone.js中,可以使用

实例化具有预先存在的JSON数据的模型
var user = new Backbone.Model({ name: "John Doe", age: 30 });

然后通过一次调用执行更新

user.save({ age: 31 }, { success: successCallback, error: errorCallback });

这在各种场景中都很方便,例如当客户端通过缓存或预先填充的模板(例如在rails erb模板中使用<%= raw @user.to_json %>)可以获得该数据时。

我很想知道将$resourceAngular.js一起使用时如何做到这一点。现在,我有一种情况,我的数据在创建$resource之前缓存在客户端上,并且我想更新它而不需要额外的GET调用来填充对象:

app.factory('User', ['$resource', function($resource) {
    return $resource('/users/:user_id.json', { user_id: '@id' }, {
        get: { method: 'GET' },
        save: { method: 'PUT' },
        create: { method: 'POST' },
        destroy: { method: 'DELETE' }
    });
}]);

在我的控制器的某个地方,我只想更新现有用户而不从服务器获取它:

app.controller('UsersController', ['User', function(User) {
    // somehow initialize a user from an existing
    // object, say { name: "John Doe", age: 30 }
    user.age = 31
    user.$save()

    // instead of doing this
    User.get({ user_id: 100 }, function(user, respHeaders) {
        user.age = 31
        user.$save()
    }); 
}]);

我可能仍处于Backbone心态,但如果我接近这一切都错了,我真的很好奇。感谢。

1 个答案:

答案 0 :(得分:12)

$ resource提供了创建新用户的选项,就像使用任何对象一样:

var user = new User({name : 'John Doe', age: 30});
user.age = 32;
user.$save();

Resource Docs