javascript - Angular UI-Router $urlRouterProvider.when 处理程序结果被 $state 忽略

标签 javascript angularjs url-rewriting angular-ui-router

我添加了一个 when() 方法来设置/验证路由前缀,它看起来像这样:

$urlRouterProvider.when(/[a-z]{2}-[a-z]{2}/, [
  '$match','myValidatorSrv',
  function($match, myValidatorSrv) {
    if ( myValidatorSrv.validate($match[0]) ) return true;
    // …
    return $match.input.replace($match[0],'en-us');
  }
]);
$urlRouterProvider.when(/(?![a-z]{2}-[a-z]{2})/, [
  '$match','myValidatorSrv',
  function($match, myValidatorSrv) {
    // …
    return $match.input.replace('/', '/en-us/');
  }
]);

重写如我所料发生,我得到 /en-us/home (GET /home)。

我的状态是这样设置的:

$stateProvider
.state('base', {
    abstract: true,
    url: '/{locale}'
})
.state('base.home', {
    url: '/home',
    views: {
        'home@': {
            templateUrl: '/partials/home.html'
        }
    }
});

问题是,有了 when(),状态不再匹配( View 未加载);即使我手动转到 /en-us/home,状态仍然不会被触发。

我需要做一些特别的事情来让 $state 重新评估吗?

最佳答案

a working plunker

这将是调整后的 .when()

$urlRouterProvider.when(/[a-z]{2}-[a-z]{2}/,
  ['$match', function($match) {

    var supported = ['cs-cz', 'en-us', 'en-gb'];  
    var isSupported = supported.indexOf($match[0]) >= 0 ;
    if(isSupported){
      return false;
    }
    return $match.input.replace($match[0], 'en-us');
  }
]);
$urlRouterProvider.when(/^(.(?![a-z]{2}-[a-z]{2}))/,
  ['$match', function($match) 
  {
    return $match.input.replace('/', '/en-us/');
   }
]);

这一切都与:

$urlRouterProvider - when() for redirection

小引用:

handler as Function

If the handler is a function, it is injectable. It gets invoked if $location matches. You have the option of inject the match object as $match

The handler can return:

  • falsy to indicate that the rule didn't match after all, then $urlRouter will continue trying to find another one that matches.
  • a String, which is treated as a redirect and passed to $location.url()
  • nothing or any truthy value tells $urlRouter that the url was handled

查一下here

关于javascript - Angular UI-Router $urlRouterProvider.when 处理程序结果被 $state 忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26172461/

相关文章:

apache - Htaccess 中 RewriteRule 后的 PHP 和非 PHP 访问 URL

javascript - 有关 ajax 和识别表中数据的问题

javascript - 在 Javascript 上发送数组值,但它显示为 [object Object]

javascript - JS Cookie 根据用户显示/隐藏表单

css - 将 Angular Material 下拉菜单移至左侧

iis - Azure 云服务和 HTTP -> HTTPS URL 重写导致 500.19 错误

javascript - React Component 成员在渲染后重置为未定义

javascript - 如何确定 Controller 在angularJS的全局命名空间上可用

html - 加载 HTML 内容后应用的 CSS 规则

asp.net - 如何调试UrlRewriter.NET?