Dar*_*arz 12 rest restful-url angularjs
我正在使用AngularJS $资源模型来REST API.我有这样的事情:
angular.module('libraryapp')
.factory('Book', function($resource){
return $resource('books/:id');
});
Run Code Online (Sandbox Code Playgroud)
我用这种方式:
Book.get({ id: 42 }, function(book) {
console.log(book);
});
Run Code Online (Sandbox Code Playgroud)
但我也想要一个端点到子资源,让我们说:
GET /books/:id/comments
Run Code Online (Sandbox Code Playgroud)
我该如何在模块中定义它?我可以用某种方式扩展Book,就像这样使用它
Book.get({ id: 42 }).Comment.query(function(comments) {
console.log(comments);
});
Run Code Online (Sandbox Code Playgroud)
您可以使用AngularJS $resource定义轻松访问嵌套的RESTful资源.
线索是了解$ resource定义params中每个动作定义(在列表中actions)的参数是如何工作的.正如文档所说,它是一个
此操作的可选预绑定参数集.[...]
angular.module('libraryApp').factory('Book', [
'$resource', function($resource) {
return $resource('books/:id/:subResource', {}, {
comments: { // The `comments` action definition:
params: {subResource: 'comments'},
method: 'GET'
}
});
}
]);
Run Code Online (Sandbox Code Playgroud)
鉴于上述定义,您仍然可以Book像以前一样使用.例如,Book.get({ id: 42 })转换为GET books/42/请求.
但是,鉴于URL()的新:subResource部分,您现在可以生成一个$resource'books/:id/:subResource'
GET books/42/comments
Run Code Online (Sandbox Code Playgroud)
通过调用请求,要么 Book.get({ id: 42, subResource: 'comments' })或更短期和简洁的界面Book.comments({ id: 42 })定义为您的comments行动.
据我所知,您无法嵌套资源,但执行您要查找的操作非常简单:
您可以定义可选参数,您可以在每个资源中覆盖这些参数(如此处category),甚至覆盖 url(查看资源otherUrl)
angular.module('libraryApp').factory('Book', [
'$resource', function($resource) {
return $resource('books/:id/:category', {}, {
comments: {
method: 'GET',
action: 'category'
},
otherUrls: {
method: 'GET',
url: 'books/:id/admin/:option'
}
});
}
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4540 次 |
| 最近记录: |