角度路由:相同的URL但条件路由

时间:2016-08-06 07:49:30

标签: angularjs

现在我的路线如下:

.state('tab.simon', {
    url: '/plan/:exerciseId', <== Notice here
    resolve: {
      authenticated: ['djangoAuth', function(djangoAuth){
        return djangoAuth.authenticationStatus();
      }],
    },
    views: {
      'tab-plan': {
        templateUrl: '/templates/simon.html',
        controller: 'simonCtrl',
        data: {
          css: '/css/simon.css'
        }  
      }
    },
    cache: false
  })

exerciseId的值可以是8/9/10/11/12,对于每个这样的路线,即/plan/8/plan/9等,都有一个单独的控制器和相应的模板以及一个css文件。

现在写我已将其编码如下:

.state('tab.simon', {
    url: '/plan/8', 
    resolve: {
      authenticated: ['djangoAuth', function(djangoAuth){
        return djangoAuth.authenticationStatus();
      }],
    },
    views: {
      'tab-plan': {
        templateUrl: '/templates/simon.html',
        controller: 'simonCtrl',
        data: {
          css: '/css/simon.css'
        }  
      }
    },
    cache: false
  })

  .state('tab.pinpoint', {
    url: '/plan/9', 
    resolve: {
      authenticated: ['djangoAuth', function(djangoAuth){
        return djangoAuth.authenticationStatus();
      }],
    },
    views: {
      'tab-plan': {
        templateUrl: '/templates/pinpointReaction.html',
        controller: 'pinpointCtrl',
        data: {
          css: '/css/pinpoint.css'
        }  
      }
    },
    cache: false
  })

这不是最佳选择,在这种情况下,我无法像$stateparams一样利用plan/:exerciseId

我该如何处理?

1 个答案:

答案 0 :(得分:0)

我不知道技术上有多可能,但从逻辑上讲,我解决了我的问题。

基本上,每条路线都有它自己的控制器,所以传递exerciseId作为stateParam是不必要的,正如我最初想的那样。我可以在我的控制器中硬编码,如下所示:

$scope.gameType=9
var url = "https://127.0.0.1:8000/api2/games/get_game/" + $scope.gameType + "/";

而不是

var exerciseType = Number($stateParams.exerciseId);
var url = "https://127.0.0.1:8000/api/exercises/get_exercise/" + exerciseType + "/";