2017-06-21 108 views
1

我在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文檔中找到直觀的解決方案,但也許我錯過了一些東西。任何人之前做過?

回答

0

一段時間後,我決定來解決它像這樣,我認爲這是做最徹底的方法:

(注:用繩子這是一個簡化版本我已經更換功能,省略依賴和刪除行,這是不工作的代碼,這是關於這個想法)。

  • 揭露語言變量根狀態的決心的一部分,這樣的事情:

    $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。。

相關問題