2

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

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

4

3 回答 3

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;

});
于 2014-02-05T15:15:10.863 回答
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) {
    ...

对 Angular 进行很好的补充,让我们DEFAULT_ACTIONS将来修改它。同时,您可以通过...快速修复它

  var myResource = $resource('/myresource');
  delete myResource.save;
  delete myResource.delete;
  delete myResource.remove;
  delete myResource.query;

... 我猜; 虽然这有点“脏”。

于 2014-02-05T14:49:34.467 回答
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});

然后你将永远不必看到那些$-方法/属性。

于 2014-02-05T14:32:25.303 回答