停止追加斜杠添加

时间:2016-07-05 16:07:22

标签: angularjs angular-ui-router

我正在使用ui-router,当我点击<a ui-sref="signup">Signup</a>等链接时,状态会正常加载。

状态如下:

.state('signup', {
  url: '/signup',
  templateUrl: '/signup/signup.view.html',
  controller: 'signupCtrl'
})

但是,当我在地址栏中输入地址时,会在网址中添加一个尾部斜杠。我意识到我可以创建一个额外的状态来处理这个问题,例如:

.state('signup2', {
  url: '/signup/',
  templateUrl: '/signup/signup.view.html',
  controller: 'signupCtrl'
})

但这并不理想。有没有办法阻止斜线被添加?理想情况下,它并不涉及这样的黑客攻击:

//remove trailing slash from url so it matches states
$urlRouterProvider.rule(function($injector, $location) {
  var path = $location.path();
  var hasTrailingSlash = path[path.length-1] === '/';

  if(hasTrailingSlash) {

    //if last charcter is a slash, return the same url without the slash  
    var newPath = path.substr(0, path.length - 1); 
    return newPath; 
  }
});

因为这与我正在使用的其他内容发生冲突。

更新

我正在使用:

$locationProvider.html5Mode(true);
$urlRouterProvider.otherwise('/');

如果没有html5模式,问题就会消失。因此,例如,如果我键入/#/signup,则不会添加尾部斜杠。

1 个答案:

答案 0 :(得分:1)

我想我已经找到了问题的解决方案。将$urlMatcherFactoryProvider注入应用程序的配置并设置:

$urlMatcherFactoryProvider.strictMode(false);