有角的ui路由器。基于父状态参数的子状态参数

问题描述:

我在Angular 1.6中使用ui-router。根状态是网站语言(/ en,/ nl,/ de)。有角的ui路由器。基于父状态参数的子状态参数

大多数孩子的状态对于所有语言都是一样的。然而,对于一些国家的儿童状态的名字被翻译:

/en/english-state/common-state 
/nl/dutch-state/common-state 
/de/german-state/common-state 

我怎样才能确保中间状态始终在父状态郎参数(EN/NL /日)匹配?我想在不提供中间状态的情况下使用ui-sref;这应该根据语言自动填充。当中间状态与父状态中的语言不匹配时,它应该自动更改以匹配父状态中的语言。

我无法在ui-router文档中找到直观的解决方案,但也许我错过了一些东西。任何人之前做过?

一段时间后,我决定来解决它像这样,我认为这是做最彻底的方法:

(注:用绳子这是一个简化版本我已经更换功能,省略依赖和删除行,这是不工作的代码,这是关于这个想法)。

  • 揭露语言变量根状态的决心的一部分,这样的事情:

    $stateProvider.state({ 
        url: '/{lang:(?:en|nl|de)}', 
        name: 'root', 
        [ ... ] 
        resolve: { 
         language: function() { return $stateParams.lang } 
        } 
    
  • 在子状态,检查URL的语言相匹配:

    $stateProvider.state({ 
        url: '/{mySlug:(?:english-state|dutch-state|german-state|__my-state__)}',    
        name: 'root.child', 
        resolve: { 
         checkSlug: function() { 
          $timout(function() { 
    
           if (notMatchesLanguage($stateParams.mySlug, language)) { 
             var params = JSON.parse(JSON.stringify($stateParams)); 
             params.mySlug = correctSlug; 
    
             $state.transitionTo($state.current.name, params, { notify: false }); 
           } 
          } 
         } 
        } 
    
  • 请注意在mySlug列表中添加的slug,__my-state_ _

  • 现在在每个ui-sref或$ state.go中,我们可以使用__my-state_作为mySlug参数。这个奇怪的slu will不会匹配任何语言,并将被替换为匹配的状态slu。。