AngularJS如何在$ resource实例上存储仅客户端信息

时间:2015-08-04 03:44:04

标签: javascript angularjs

我正在试图找出“正确的方法”来存储资源实例的仅客户端状态。

假设我有一个ng-resource,Blerg只有一个数据字段,“name”和per the docs,我会这样做

var blergInstance = new Blerg();
blergInstance.name = "Frankie";
blergInstance.$save();

这会导致使用json {name: "Frankie"}对资源URL进行http POST。太好了。

但实际上我需要在我的客户端应用程序界面上传递blergInstance一段时间,我想存储一些关于blergInstance的状态来告诉客户端应用程序如何显示它或如何与它互动。例如。我有一个指令,希望可选择向用户显示“您的blergInstance尚未保存”。或者我在其他地方有一个按钮,“穆格这个Blerg ”,我只想在保存之前让Blerg成为一次

我的第一个(天真的)天真的方法是做类似

的事情
var blergInstance = new Blerg();
blergInstance.name = "Frankie";
blergInstance.saved = false //
blergInstance.hasBeenMooged = false // 
// pass the blergInstance around to other services, directives, etc
blergInstance.$save();

但现在http POST看起来像{name: "Frankie", saved: false, hasBeenMooged: false}

那么我应该如何将“state”附加到仅与客户端相关的资源实例,哪些不应该发送到服务器?

2 个答案:

答案 0 :(得分:2)

为什么不将资源状态包装到一个简单的对象中并传递,其中资源只具有必要的属性

var stateful = {};
var blergInstance = new Blerg();
blergInstance.name = "Frankie";

stateful.resource = blergInstance;
stateful.saved = false;
stateful.hasBeenMooged = false;

// pass the blergInstance around to other services, directives, etc
stateful.resource.$save();

答案 1 :(得分:0)

这是代码jaff解决方案的替代方案

警告:提前coffeescript

第1步: 使用所有API调用创建服务

app.service 'Api', ['$resource', ($resource) ->
    {
        Blerg: $resource "/api/v1/blerg/:id", {id: "@id"}
        ....
    }
]

第2步: 调用您的Api服务并传入显式对象

app.controller 'Ctrl', (Api) ->
    saveBlerg = {}
    saveBlerg.name = Blerg.name
    Api.Blerg.save(saveBlerg)