1

我的 JSON 数据如下所示,包含在名为“parks.json”的文件中:

{
    "description": "Farnborough features a good amount of green space and is indeed surrounded by plenty more. Our Parks section aims to tell you, not only where they all are but a little bit about the history behind them and the people who look after them today.",
    "id": "parks",
    "name": "Parks",
    "locations": [
        {
            "name": "Queen Elizabeth Park",
            "lat": 51.29692,
            "lng": -0.76080000000000003,
            "synopsis": "Once part of Windsor Great Park"
        },
        {
            ...
        }
    ]
}

以下 $resource 查询将检索上述数据片段:

return $resource('locations/:categoryId.json', {}, {
    query: {method:'GET', params:{categoryId:'categories'}, isArray:true}
  });

传入的 categoryId 是“parks”,因此上面的代码将检索我的整个 Parks.json 文件并将其加载到一个对象中。这很好,但是我只想将其中的一部分提取到数组或对象中。

我的问题是如何调整上述内容以仅提取位置?我对 lat 和 lng 值特别感兴趣。我已经完成了各种其他工作,需要采取这种行动,因为我不太熟悉如何做到这一点。

干杯!

4

1 回答 1

3

一些东西:

  • 这可能不是$resource. $http在这种情况下会更可取,因为您并没有真正处理 RESTful Web 服务。您显然正在处理GET.json 文件上的 s 。Using$resource将实例化一堆你不需要也不能使用的额外功能和开销。
  • 过滤您返回的结果的最佳位置是在服务器上。我知道你不能用 .json 文件真正做到这一点,但值得一提。
  • 这实际上不是 $resource 甚至 Angular 的问题,就像 JavaScript 的问题一样,您想要做的是从数组中获取对象的子集。

所有这一切都说...如果您必须使用 $resource 执行此操作,您可以执行类似以下伪代码的操作:

// a factory to create your Park resource service.
app.factory('Park', ['ngResource', function($resource) {
    //your Park resource constructor.
    var Park = $resource('locations/:categoryId.json', {}, {
        query: {method:'GET', params:{categoryId:'categories'}, isArray:true}
      });

    //a "static" function on Park to filter results.
    Park.filter = function(parks, predicate) {
        var results = [];
        for(var i = 0; i < parks.length; i++) {
            var park = parks[i];
            if(predicate(park)) {
                results.push(angular.copy(park));
            }
        }
        return results;
    };

    //return the constructor
    return Park;
}]);

// a controller example to consume your service.
app.controller('MainCtrl', function($scope, Park) {
    // get all parks in category 123
    var allParks = Park.query({categoryId: 123});

    // filter the parks down to the ones named "Hooterville Park"
    $scope.parks = Park.filter(allParks, function(park) {
        return park.name === 'Hooterville Park';
    });
});

问题是,$resource 可以与 RESTful 资源一起使用,如下所示:

// create a basic resource.
var Foo = $resource('/Foo/:id');

// get and update one item.
var foo = Foo.get(123, function() {
    foo.name = 'Test';
    foo.email = 'blah@sample.com';
    foo.$save();
});

// create a new item.
var foo2 = new Foo();
foo2.name = 'New guy';
foo2.email = 'new@guy.com';
foo.$save();

// get and update a bunch of items.
var foos = Foo.query();
for(var i = 0; i < foos.length; i++) {
   var fooItem = foos[i];
   fooItem.name = 'Foo ' + i;
   fooItem.$save();
}

因此,除非您打算这样做,否则我会说继续使用 $http。

于 2012-11-21T02:44:47.927 回答