有角的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。。