抓住json所需的结果--- restangular

时间:2014-01-09 08:13:04

标签: angularjs angularjs-scope restangular

我试图从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的记录。我怎么能这样做。如果可能的话,在我需要的另一个案例中,我需要做些什么来获得前两个记录。

由于

1 个答案:

答案 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属性进行过滤的方式编写的,那么它将返回正确的结果,您不必过滤它们。