我试图从json中获取几个id而不是json的完整有效负载。那可能吗?这是我的代码
Car.controller('IndexCtrl', function ($scope, CarRestangular) {
$scope.cars = CarRestangular.all('car').getList();
});
这是我的json
[
{
"id": 1,
"name": "Mike",
},
{
"id": 2,
"name": "Floyd",
},
{
"id": 3,
"name": "Roy",
},
{
"id": 4,
"name": "Roy",
},
]
我想得到ID为2和4的记录。我怎么能这样做。如果可能的话,在我需要的另一个案例中,我需要做些什么来获得前两个记录。
由于
答案 0 :(得分:0)
较新版本的angular不会自动取消范围内的promise。因此你无法立即做到:
$scope.cars = CarRestangular.all('car').getList();
但你必须这样做:
CarRestangular.all('car').getList().then(function(result){
$scope.cars = result;
));
如果包含lodash,过滤效果最佳。
https://gist.github.com/lc-nyovchev/7414166e4dbf2dfbc908
您可以使用为您进行过滤的方法定义服务:
.factory('SomeService',['$q', 'Restangular', function($q,Restangular){
return {
someMethod: function(){
var deferred = $q.defer();
Restangular.all('car').getList().then(function(results){
var filtered = _.filter(results, function(result){
return result.id === 2 || result.id === 4;
});
return deferred.promise;
}
};
}])
然后在控制器中使用该服务:
.controller('YourController', ['SomeService', function(SomeService){
SomeService.someMethod().then(function(filteredResult){
$scope.cars = filteredResult;
});
}]);
或者你可以这样做:
CarRestangular.all('car').getList().then(function(results){
$scope.cars = _.filter(results, function(result){
return result.id === 2 || result.id === 4;
});
});
编辑:所有这些答案都假定您要进行过滤客户端。如果您的后端支持它,您可以执行以下操作:
CarRestangular.all('car').getList(id:[2,4]).then(function(result){
$scope.cars = result;
));
如果您的后端是以支持对id属性进行过滤的方式编写的,那么它将返回正确的结果,您不必过滤它们。