UI-路由器可选url参数前面的静态部分

UI-Router optional url parameter preceeding static part

我正在使用 1.x 版本的 UI-Router。我有一个按位置划分的网站,每个位置的页面布局和内容都相同:

mysite.com
mysite.com/location1
mysite.com/location1/about
mysite.com/location1/contact

mysite.com/location2
mysite.com/location2/about
mysite.com/location2/contact

我想对页面(关于、联系)等使用相同的 templates/components,但根据参数更改我进行的 API 查询。我正在使用位置 URL 参数设置我的状态,如下所示:

.state('about', {
    url: '/:location/about',
    params: {
      location: 'default'
    }
})

我真正希望能够做的不是提供某种默认位置参数,而是希望它是完全可选的 - 正如以下 url 中的那样:

mysite.com/about
mysite.com/contact

它会提供默认值(但不会显示在 URL 中)。我希望 ui-sref 等其他指令以相同的方式工作。我应该可以使用:

ui-sref="about({location: something})"

如果 something 为 null 或 falsy,它将显示缩短的 url。 ui-sref-active 等其他指令也应该足够聪明,可以识别默认值。

这样的事情可能吗?提前致谢!

有更详细的说明:

Angular js - route-ui add default parmeter

关键是 - 必须精确定义参数,以明确UI - 路由器决定:"Is it parameter? or is it next part (e.g. /about)"

以上片段 link:

.state('root', {
    url: '/{lang:(?:en|he|cs)}',
    abstract: true,
    template: '<div ui-view=""></div>',
    params: {lang : { squash : true, value: 'en' }}
})

因此,对于 UI-Router,lang 参数的值很容易与其他值区分开来。 squash 选项添加了更多魔法。查看更多 here