我有一个事件的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?
答案 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];
}
}
}
});
}
}
}
])
我目前没有设置环境进行测试,但我认为它应该可行。由于其他原因,我在自己的代码中有几个地方可以做类似的事情。