我正在尝试实现一个语言切换器,如果用户从“en”端的任何给定页面单击“de”,它会将他们带到“de”端的那个页面。如果我 console.dir 使用 $state 参数,它会使用给定 $state 的“当前”属性公开我想要的值。如果我尝试 console.dir $state.current 来关注我想要的值,它只会给出父状态属性(我当前的视图是嵌套的)。
我目前的想法是,我在 url/en/content 上,然后我可以动态地让我的 lang 导航将适当的目标点动态加载到某种数据属性中,使用自定义指令来选择那些我会启动的“转到”并为每个角度翻译设置我的首选语言值。
目前的关键问题是暴露 $state 名称 - 同样,当简单地浏览 $state 时,当前对象会给出我想要的值,但 $current.state 直接只给出父状态。
如果有人对如何做到这一点有更好的建议(以角度方式 - 没有自定义 cookie 垃圾),我很乐意接受建议。
谢谢!
更新!代码示例:
我的状态的对象参考:
var urlStates = {
en: {
home: {
name: 'home',
url: '/en',
templateUrl: 'templates/'+lang+'/home.html',
abstract: 'true'
},
home_highlights: {
name:'home.highlights',
url: '',
templateUrl: 'templates/'+lang+'/home.highlights.html'
},
home_social:
{
name: 'home.social',
url: '/social',
templateUrl: 'templates/'+lang+'/home.social.html'
},
home_map:
{
name: 'home.map',
url: '/map',
templateUrl: 'templates/'+lang+'/home.map.html'
}
};
我的州:
$stateProvider
.state(urlStates.en.home)
.state(urlStates.en.home_highlights)
.state(urlStates.en.home_social)
.state(urlStates.en.home_map);
$locationProvider.html5Mode(true);
})
控制器:
.controller('LandingPage', function($translate, $state){
this.state = $state;
this.greeting = "Hello";
});
最后,我在 dom 中看到的输出:
使用 this.state = $state;
{
"params": {},
"current": {
"name": "home.highlights",
"url": "",
"templateUrl": "templates/en/home.highlights.html" },
"transition": null
}
使用 this.state = $state.current
{
"name": "",
"url": "^",
"views": null,
"abstract": true
}