我使用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;
}
]);
此代码有两个问题:
- 我必须用两种不同的方式在两个地方定义API路由。我想要利用第一次定义的资源url
- 我不能像调用
.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()
。