UI-Router可选的url参数,位于静态部分之前

时间:2016-07-19 21:48:31

标签: angularjs angular-ui-router angular-ui state

我正在使用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

我想为页面(关于,联系)等使用相同的模板/组件,但是根据参数更改我的API查询。我使用位置网址参数设置状态,如下所示:

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

我真正希望能做的不是提供某种默认的位置参数,我希望它完全是可选的 - 就像下面的网址一样:

mysite.com/about
mysite.com/contact

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

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

如果something为null或falsy,则会显示缩短的网址。像ui-sref-active这样的其他指令应该足够聪明,以便识别默认值。

有可能吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

有更详细的说明:

Angular js - route-ui add default parmeter

要点是 - 必须精确定义参数,以便让UI-Router明确决定:“它是参数吗?还是下一部分(例如/ about)”

以上链接的摘录:

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

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