bla*_*jid 9 javascript rest angularjs angular-resource
我有这个终点
/clients/:id
/bills/:id
/clients/:id/bills
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用angular-resource创建一些资源来表示我的API.
我为客户创建了一个资源,
.factory('Clients', function($resource){
return $resource('/clients/:id')
})
.factory('Bills', function($resource){
return $resource('/bills/:id')
});
Run Code Online (Sandbox Code Playgroud)
工作得很好.
我的问题是当我想定义一个资源来表示调用端点的客户端的账单时 /client/:id/bills
我认为这应该是一个带有方法或类似方法的Bills资源getFromClient(),因为它将从客户端返回一个Bills数组.但我已经使用了比尔名称.端点与已定义的端点不同.
知道如何构建这个吗?
bla*_*jid 18
我想我现在正在寻找的是Anguar 1.1
.factory('Bills', function($resource){
return $resource('/bills/:id',{}, {
get: {
method: 'GET',
params:{
clientId: '@clientId'
}
},
'getFromClient': {
method:'GET',
params: {
clientId: '@clientId'
},
url: host + "/clients/:clientId/bills",
isArray: true
}
})
});
Run Code Online (Sandbox Code Playgroud)
现在,您可以向方法声明添加url属性以覆盖主URL.
如果您想使用能够解决此问题的库以及许多其他库,您可以尝试https://github.com/platanus/angular-restmod
这是一个例子:
.factory('Client', function(restmod){
return restmod.model('clients', {
bills: { hasMany: 'Bill' }
});
}
.factory('Bill', function(restmod){
return restmod.model('bills');
}
.controller('myController', function(Client){
$scope.client = Client.$find(1);
$scope.client.bills.$search();
});
Run Code Online (Sandbox Code Playgroud)
检查ngResource文档...向下滚动到第一个示例标题:http://docs.angularjs.org/api/ngResource.$resource
这有点令人困惑,因为他们在示例中没有做到这一点......哈哈
我相信它看起来像:
.factory('Clients', function($resource){
return $resource('/clients/:id', {id:'@id'})
})
.factory('ClientBills', function($resource){
return $resource('/clients/:clientId/bills/:id', {clientId:'@clientId', id:'@id'})
});
Run Code Online (Sandbox Code Playgroud)
我没有测试过这个,但我认为这是正确的.=)
UPDATE
然后你会像这样访问它们:
.controller('MyCtrl', function ($scope, $routeParams, Clients, Bills) {
$scope.client = Clients.get({id:$routeParams.clientId})
$scope.bills = ClientBills.get({clientId:$routeParams.clientId})
})
Run Code Online (Sandbox Code Playgroud)
我还将服务名称更改为"ClientBills",因为它更具体到任务,您可能需要一个不需要客户端ID的"Bills"服务...