如何在Angular服务中获取$ stateParams

问题描述 投票:0回答:1

这是我的state定义:

.state('sub-topic',{
    url:"/topics/:topicId",
    templateUrl: "templates/sub-topics.html",
    controller: "SubTopicsController"
})

这是我的service

myApp.service('subTopicsService',function($http, $stateParams){

    this.getSubTopics = function(){
        $http.get('topics/' + $stateParams.topicId + '.json').success(function(data, status, header, config) {
             return data;
        });
    }
})

我的controller的一部分,有'subTopicService'注射

$scope.topicList = subTopicsService.getSubTopics();

问题是,$stateParams是服务中的undefined。具体来说,我收到此错误消息:Cannot access property :topicId of undefined.如何在我的服务中使用$stateParams

javascript angularjs angularjs-service angular-ui-router
1个回答
0
投票

这种情况应该有效。有一个工作plunker。我做的改变:

我刚重构了服务定义:

myApp.service('subTopicsService', function($http, $stateParams) {

  var getSubTopics = function() {
    $http.get('topics/' + $stateParams.topicId + '.json ')
      .success(function(data, status, header, config) {
        return data;
      });
  };
  // to prove, that this service can work with $stateParams
  var getStateParams = function() {
    return $stateParams;
  };

  return {
    getSubTopics: getSubTopics,
    getStateParams: getStateParams,
  };
});

这里我们将服务注入到控制器中:

myApp.controller('SubTopicsController', function($scope, $state, subTopicsService) {

  $scope.stateParams = subTopicsService.getStateParams();
});

这是我们的观点,消耗所有:

$stateProvider
    .state('sub-topic', {
      url: "/topics/:topicId",
      //templateUrl: "templates/sub-topics.html",
      template: '<div><pre>{{stateParams}}</pre></div>',
      controller: "SubTopicsController",
    });

有关更多详细信息,请参阅工作plunker

© www.soinside.com 2019 - 2024. All rights reserved.