如何向angular rails资源

时间:2015-12-06 12:54:37

标签: javascript ruby-on-rails angularjs ajax

我正在使用angular-rails-resource进行Angular的ajax调用 我想在我的资源中创建应该表现的自定义方法 与.query()方法相同。以下是资源的代码:

 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路由。一世 我想利用第一次定义的资源网址。
  2. 我不能这样称呼,因为我会调用.query()方法 userId直接作为参数,而不是作为对象。
  3. 如何将此代码改进为已定义的更多.query()方法 角轨道资源? 我想以下列方式调用此方法.feed()

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

1 个答案:

答案 0 :(得分:1)

在名为.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.feed()一样使用Posts.query()