如何在AngularJS中搜索并返回JSON资源的特定索引?

时间:2014-10-24 16:17:14

标签: javascript json angularjs ngresource

我有一个事件的json文件设置如下:

{
  2: {
    sched_conf_id: "38",
    title: "Coffee Break",
  },
  3: {
    sched_conf_id: "39",
    title: "registration",
  },
}

我设置和角度工厂这样:

.factory('eventFactory', ['$resource',
    function($resource) {
        return {
            query: function(event_id) {
                return $resource('/assets/events.json', {}, {
                    query: { method: 'GET', params: {id:event_id}, isArray: false }
                }).query();
            }
        }
    }
])

最后我有我的角度控制器,它从工厂调用查询方法,id为来自url的id:

.controller('eventCtrl', function($scope, $routeParams, eventFactory) {
     var eventId = $routeParams.event_id;
     $scope.eventData = eventFactory.query(eventId);
})

返回数据似乎只是整个events.json文件,而不仅仅是我想在参数中查询的特定ID。在params我尝试id,但这显然是不正确的。使用此设置如何只返回event_id中的数据:2?

1 个答案:

答案 0 :(得分:1)

假设您的生产方案只是获取一个静态文件,该文件对传入的参数没有任何作用,您需要从服务器返回后提取所需的记录。

基本上,您正在请求类似http://yourhost.com/assets/events.json?event_id=3的内容,如果它只是一个静态文件,则服务器无法对该参数执行任何操作。在实践中,我认为你实际上是在请求来自可以处理它的Web服务的响应,在这种情况下,你的客户端代码可能会按原样运行。

但是,在这种特殊情况下,我认为您可以使用拦截器处理此问题。像这样:

.factory('eventFactory', ['$resource',
    function($resource) {
        return {
            query: function(event_id) {
                return $resource('/assets/events.json', {}, {
                    query: { method: 'GET', isArray: false,
                               interceptor: {response: 
                                   function(data){ var  d = JSON.parse(data);
                                       return d[event_id];
                                   } 
                               }
                           }
                });
            }
        }
    }
])

我目前没有设置环境进行测试,但我认为它应该可行。由于其他原因,我在自己的代码中有几个地方可以做类似的事情。