ngResource
看起来是一种非常方便的方式来管理RESTful(或至少是REST启发的)Api中的数据访问...但是我想要使用它管理的一些数据是只读的(至少从我的应用程序的角度来看)。
有没有办法阻止ngResource
返回的对象添加保存,删除和删除方法?就文档而言,它看起来像是一个唯一的附加API ...
答案 0 :(得分:5)
您只需要从Constructor原型中删除实例方法:
的 PLUNKER 强>
app.factory('SomeResource', function($resource){
var r = $resource('/some/api/path');
delete r.prototype.$save;
delete r.prototype.$delete;
delete r.prototype.$remove;
return r;
});
答案 1 :(得分:0)
而不是:
var Car = $resource('/cars');
var myCar = new Car();
myCar.color = 'red';
myCar.$save();
执行:
var Car = $resource('/cars');
var myCar = {};
myCar.color = 'red';
Car.save(myCar);
和
var Car = $resource('/cars/:id');
var myCar = Car.query({id: 52});
然后你将不必看到那些$
- 方法/属性。
答案 2 :(得分:0)
我认为不可能,因为源代码看起来像这样:
var DEFAULT_ACTIONS = {
'get': {method: 'GET'},
'save': {method: 'POST'},
'query': {method: 'GET', isArray: true},
'remove': {method: 'DELETE'},
'delete': {method: 'DELETE'}
};
和
actions = extend({}, DEFAULT_ACTIONS, actions);
function extractParams(data, actionParams) {
var ids = {};
actionParams = extend({}, paramDefaults, actionParams);
forEach(actionParams, function(value, key) {
if (isFunction(value)) {
value = value();
}
ids[key] = value && value.charAt && value.charAt(0) == '@' ?
lookupDottedPath(data, value.substr(1)) : value;
});
return ids;
}
function defaultResponseInterceptor(response) {
return response.resource;
}
function Resource(value) {
shallowClearAndCopy(value || {}, this);
}
forEach(actions, function(action, name) {
...
将角色很好,让我们将来修改DEFAULT_ACTIONS
。同时你可以通过...快速修复它。
var myResource = $resource('/myresource');
delete myResource.save;
delete myResource.delete;
delete myResource.remove;
delete myResource.query;
......我想;虽然那有点“脏”。