从ngResource中抑制方法

时间:2014-02-05 13:15:06

标签: angularjs ngresource

ngResource看起来是一种非常方便的方式来管理RESTful(或至少是REST启发的)Api中的数据访问...但是我想要使用它管理的一些数据是只读的(至少从我的应用程序的角度来看)。

有没有办法阻止ngResource返回的对象添加保存,删除和删除方法?就文档而言,它看起来像是一个唯一的附加API ...

3 个答案:

答案 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;

......我想;虽然那有点“脏”。