ngResource
看起来像是在 RESTful(或至少受 REST 启发)Api 中管理数据访问的一种非常方便的方法......但我想使用它管理的一些数据是只读的(至少从我的应用程序的角度来看)。
有什么方法可以防止返回的对象ngResource
添加保存、删除和删除方法?就文档而言,它看起来像是一个唯一的附加 API...
ngResource
看起来像是在 RESTful(或至少受 REST 启发)Api 中管理数据访问的一种非常方便的方法......但我想使用它管理的一些数据是只读的(至少从我的应用程序的角度来看)。
有什么方法可以防止返回的对象ngResource
添加保存、删除和删除方法?就文档而言,它看起来像是一个唯一的附加 API...
您只需要从 Constructor 原型中删除实例方法:
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;
});
我认为这不可能,因为源代码如下所示:
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) {
...
对 Angular 进行很好的补充,让我们DEFAULT_ACTIONS
将来修改它。同时,您可以通过...快速修复它
var myResource = $resource('/myresource');
delete myResource.save;
delete myResource.delete;
delete myResource.remove;
delete myResource.query;
... 我猜; 虽然这有点“脏”。
代替:
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});
然后你将永远不必看到那些$
-方法/属性。