我在应用程序中使用angular来显示新闻列表。当我转到特定页面时,我想显示该特定新闻项目的所有信息。我试图在调用我的服务时使用$ stateParams,但是我没有回到那个,而是收回整个新闻列表。
我应该补充一点,我使用的API只是一个我用于测试目的的.json文件。
以下是我使用resolve决定拨打我的服务的路线:
.state('hub.news-detail', {
url: '/news/{id}',
title: 'News',
templateUrl: helper.basepath('news-detail.html'),
resolve: {
getNewsItem: function($stateParams, News){
return News.query({id: $stateParams.id}).$promise;
}
},
controller: 'NewsDetailController'
})
我的服务看起来像这样:
(function() {
'use strict';
angular
.module('hub.news')
.factory('News', News);
News.$inject = ['$resource'];
function News($resource) {
var resource = $resource('/client/server/news.json', {id: '@news_id'}, {
query: {method:'GET', isArray: true},
});
return resource;
}
})();
如果我控制台。记录我要回来的内容,我会得到整个新闻列表:
[Resource, Resource, Resource, Resource, Resource, Resource, Resource, Resource, Resource, $promise: Promise, $resolved: true]
我的代码是否有问题,或者在使用模拟json数据时是否无法按ID过滤?
答案 0 :(得分:1)
进行此次通话时
$resource('/client/server/news.json', {id: '@news_id'}
angular实际上向服务器发送GET
请求。这看起来如下:
<your server>/client/server/news.json
or
<your server>/client/server/news.json?id=<particular news id>
现在你要做的就是传递id,但你甚至不把它包含在url中,它必须是例如以下内容:
var resource = $resource('/client/server/news.json/:id', {id: '@news_id'}
然后它会生成以下网址:
<your server>/client/server/news.json/<particular news id>
但只要您的JSON是静态文件,它就无法处理您传递的参数。所以发送给JSON的内容并不重要,无论如何都是相同的JSON。
最后,回答你的问题:不,你不能用模拟JSON来做。
答案 1 :(得分:1)
问题在于你在$ resource()中使用的url。我想以下API会返回所有新闻的数组,您只需在浏览器中调用它即可查看:
/client/server/news.json
要在服务中使用$ resource()方法,您需要插入要从API中提取的ID。像这样:
$resource('/client/server/news.json/:id', {id: '@news_id'}
我建议您阅读有关$ resource here的文档: