无法获取$ stateParams将参数传递给服务

时间:2015-08-22 16:10:00

标签: angularjs angular-ui-router

我在应用程序中使用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过滤?

2 个答案:

答案 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的文档: