如何将类级自定义方法添加到angular rails资源中

How to add class-level custom method to angular rails resource

本文关键字:angular rails 资源 添加 自定义方法      更新时间:2023-09-26

我使用angular rails资源从angular调用ajax并且我想在我的资源中创建自定义方法,该方法应在与CCD_ 1方法相同。这是资源的代码:

 angular.module('mymodule').factory('Posts', ['railsResourceFactory',
   function(railsResourceFactory) {
     var resource = railsResourceFactory({
       url: 'api/v1/users/{{userId}}/posts',
       name: 'post'
     });
     resource.feed = function(userId, timestamp, page) {
       return resource.$get('api/v1/users/' + userId + '/posts/feed', {timestamp: timestamp, page: page});
     };
     return resource;
   }
 ]);

此代码有两个问题:

  1. 我必须用两种不同的方式在两个地方定义API路由。我想要利用第一次定义的资源url
  2. 我不能像调用.query()方法那样调用它,因为我有userId直接作为参数,而不是作为对象

如何将此代码改进为中已经定义的更多.query()方法角轨资源?我想通过以下方式调用此方法.feed()

Posts.feed({userId: $scope.userId}, {timestamp: new Date(), page:  1}).then(function success(posts){ /*...*/ }, function error() { /*...*/ });

在angular rails资源中有一种叫做.resourceUrl()的方便方法,它接受url参数对象并用它构建url。您只需要将.feed()更改为如下所示:

resource.feed = function(context, params) {
  return resource.$get(resource.resourceUrl(context) + '/feed', params);
};

因此,完整的服务将具有以下形式:

angular.module('mymodule').factory('Posts', ['railsResourceFactory',
  function (railsResourceFactory) {
    var resource = railsResourceFactory({
      url: 'api/v1/users/{{userId}}/posts',
      name: 'post'
    });
    resource.feed = function(context, params) {
      return resource.$get(resource.resourceUrl(context) + '/feed', params);
    };
    return resource;
  }
]);

现在,您将能够以与使用Posts.query()相同的方式使用Posts.feed()