我正在试图找出“正确的方法”来存储资源实例的仅客户端状态。
假设我有一个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”附加到仅与客户端相关的资源实例,哪些不应该发送到服务器?
答案 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)