如何使用$ routeParams来解决

时间:2015-10-26 15:37:00

标签: angularjs angularjs-service angular-promise resolve angularjs-http

我现在就这样使用$routeParams

我的工厂职能:

angular.module('fifaApp')
  .factory('FifaService', ['$http',
    function($http) {
      var sdo = {
        getTeamDetails: function(code) {
          var promise = $http.get('api/team/' + code);
          promise.success(function(data, status, headers, conf) {
            return data;
          });
          return promise;
        }
      }
      return sdo;
    }
  ]);

控制器功能:

.controller('TeamDetailsCtrl',
  ['FifaService','testt',
    function(FifaService,testt) {
      var self = this;
      self.team = testt.data;
    }
]);

配置:

angular.module('fifaApp', ['ngRoute'])
.config(function($routeProvider) {
.when('/login', {
      templateUrl: 'views/login.html'
    })
.when('/team/:code', {
      templateUrl: 'views/team_details.html',
      controller:'TeamDetailsCtrl as teamDetailsCtrl',
      resolve: {
          testt: ['$routeParams','UserService',
          function($routeParams, UserService) {
          return FifaService.getTeamDetails($routeParams.code);
      }]
  }
});
$routeProvider.otherwise({
      redirectTo: '/'
 });
});

views/team_details.html没有显示。有任何想法吗? 最诚挚的问候

4 个答案:

答案 0 :(得分:2)

我猜$routeParamsresolve中不起作用。请改用$route.current.params

getTeamDeatails: function() {
      var promise = $http.get('api/team');
      promise.then(function(resp){
        return resp.data;
      });
      return promise;
 }

resolve: { 
  testt: ['$route', 'FifaService', 
    function($route, FifaService ) { 
        return FifaService.getTeamDetails($route.current.params.code); 
 }]

答案 1 :(得分:1)

Calllback功能无法返回数据。你的'getTeamDeatails'方法应该返回一个使用回调的insteaf,因为你需要返回已经返回promise对象的'$ http.get'。

>>> li = ['a', 'e', 'a', 'd', 'b', 'a', 'e']
>>> for i,element in enumerate(li):
...     if element == 'a':
...        print(i)
... 
0
2
5

在解决方法

中添加缺少的FifaService依赖项

<强>解析

 getTeamDeatails: function() {
      var promise = $http.get('api/team');
      promise.then(function(resp){
        return resp.data;
      });
      return promise;
 }

答案 2 :(得分:0)

您需要改用$ route.current.params.key。 $ routeParams仅在更改路由后更新。因此,您的代码应遵循以下原则:

resolve: { 
    functionName: function($route) {
         console.log($route.current.params.key);
    }
}

答案 3 :(得分:-1)

不确定是否是您的问题,但您应该使用controllerAs参数。

我的意思是不要使用 controller:'TeamDetailsCtrl as teamDetailsCtrl'

但 控制器: 'TeamDetailsCtrl', controllerAs:'teamDetailsCtrl'

https://docs.angularjs.org/api/ngRoute/provider/ $ routeProvider