AngularJS: 在URL中可选的语言参数
AngularJS: 在URL中可选的语言参数
我正在使用angularjs和UI-Router。我想配置指定选择的语言的路由,但是路由的这一部分应该是可选的。
我有以下状态:
{
state: 'app',
config: {
abstract: true,
url: '/{lang:(?:de|en)}',
template: '
}
}
{
state: 'app.mainview',
config: {
url: '/mainview',
templateUrl: 'app/mainview/mainview.html',
controller: 'MainviewController',
controllerAs: 'vm',
title: 'Main View',
settings: {
pos: 1,
displayName: 'Mainview',
icon: 'code-array'
}
}
}
现在只能通过以下方式导航到mainview:
example.com/en/mainview
但是我想配置ui-router,使得以下所有路由都有效:
example.com/mainview
example.com/en/mainview
example.com/de/mainview
我可以在开头设置一个可选的语言参数路由而不使用双斜杠吗?如果不行,你有什么其他建议?
问题的原因是在AngularJS中,当我们想要在URL中添加可选的语言参数时,无法实现在不刷新页面的情况下改变语言参数的值。
解决方法是通过在路由中引入父状态来实现。具体的解决方案可以在以下链接中找到:
1. [Angular js - route-ui add default parmeter](https://stackoverflow.com/q/31459394/1679310)
2. [Prepend optional attribute in angular ui-router URL](https://stackoverflow.com/a/31837507/1679310)
在这些链接中,我们可以看到通过引入父状态来解决这个问题。在父状态中,我们可以定义一个可选的语言参数,并设置默认值。以下是一个示例代码:
.state('root', { url: '/{lang:(?:en|de|cs)}', abstract: true, template: '', params: {lang : { squash : true, value: 'en' }} })
通过这样的设置,我们可以在任何状态中改变语言参数的值,而无需刷新页面。例如,我们可以将URL从`/en/hello`改变为`/de/hello`,而不会刷新页面。