【问题标题】:Angular UI-Router $urlRouterProvider.when handler result ignored by $stateAngular UI-Router $urlRouterProvider.when 处理程序结果被 $state 忽略
【发布时间】:2014-11-28 03:05:59
【问题描述】:

我添加了一个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()s,状态不再匹配(视图没有被加载);即使我手动转到/en-us/home,状态仍然没有被触发。

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

【问题讨论】:

    标签: javascript angularjs rewrite angular-ui-router


    【解决方案1】:

    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 作为函数

    如果处理程序是一个函数,它是可注入的。如果 $location 匹配,它将被调用。您可以选择将匹配对象注入为 $match

    处理程序可以返回:

    • falsy 表示该规则根本不匹配,然后 $urlRouter 将继续尝试找到另一个匹配的规则。
    • 一个String,被视为重定向并传递给$location.url()
    • nothing 或任何 truthy 值告诉 $urlRouter url 已被处理

    查看here

    【讨论】:

    • 天啊,我应该一直使用return false 而不是return true ^^,谢谢!
    猜你喜欢
    • 2015-02-02
    • 2012-01-13
    • 1970-01-01
    • 2023-03-27
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多