如何在URL的第一级删除可选参数的额外斜杠?

时间:2016-08-03 12:19:42

标签: angularjs angular-ui-router

我想为登录状态设置第一个参数可选,它可以使用下面的.state定义

$stateProvider
.state("login", {
          url: '/:team/login/',
          templateUrl: 'app/user/login.html',
          controller: 'LoginController',
          controllerAs: 'vm',
          data: {
              requiresAuth: false,
              pageTitle: 'Login'
          }
});

$urlRouterProvider.otherwise('/main');

现在我的问题是在没有团队名称时出现,而是出现两个正斜杠//;

http://localhost:3000/#//login/

如何删除此额外的forwardslash /,以便http://localhost:3000/#/login/也开始工作

我的考试

  1. url: '[/:team]/login/' and url: '/[:team/]login/'

    但是,网址被编码后会变成http://localhost:3000/#/%5B/%5Dlogin/

  2. $urlRouterProvider.when('//login', '/login');

    但没有工作

  3. 添加了params条件

      params: { 
            team: {squash: true, value: null }
      }
    
  4. 但这甚至会阻止我之前的工作网址

    我是否需要创建一个或多个可以使其工作的状态。请帮助

1 个答案:

答案 0 :(得分:0)

请尝试更改一些代码。有两种可能的方式。两个人都在工作(团队在场和团队缺席),你不能简单地使用ui-sref(请不要使用hrefui-sref)。所以我在点击login按钮

时调用了一个函数

单程

HTML:

<a ng-click="goLogin(team.name)"> <i class="fa fa-sign-in"></i> Login </a>  
<!-- expecting you are passing team name(you can change it) -->

JS:

$stateProvider
  .state("login", {
      url: ':team/login/',
      templateUrl: 'app/user/login.html',
      controller: 'LoginController',
      controllerAs: 'vm',
      data: {
          requiresAuth: false,
          pageTitle: 'Login'
      }
 });

 $urlRouterProvider.otherwise('/main');

在您的控制器中。

 $scope.goLogin = function(team_name){
  if(team_name){
    team_name = '/'+ team_name    // will add a slash only if team_name is present
  }
  else{
   team_name = ''
  }
  $state.go({'team': team_name})
}

如果不起作用,请将$sate作为

注入您的控制器
.controller('myCtrl', ['$state', 'other_depend'], function($state, other_depend){
 ......
})