AngularJS ui-router可选参数

mik*_*kek 12 angularjs angular-ui-router

我试着设置这样的路由

...
url: '/view/:inboxId?'
...
Run Code Online (Sandbox Code Playgroud)

但是Angular会抛出这个错误:

Error: Invalid parameter name '' in pattern '/view/:inboxId?'
Run Code Online (Sandbox Code Playgroud)

所以基本上我必须设置两种不同的状态:

state('view', {
            url: '/view/:inboxId',
            templateUrl: 'templates/view.html',
            controller: 'viewCtrl'
        }).

        state('view_root', {
            url: '/view',
            templateUrl: 'templates/view.html',
            controller: 'viewCtrl'
        })
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些状态合二为一?

Rad*_*ler 8

要有一个可选的参数 - 像你一样声明它 - 但不要传递它.这是一个例子.所有这些都可以根据您的喜好使用一个州(没有根)或两个(根和细节).

问题中提到的定义已准备好处理这些状态调用:

// href
<a href="#/view/1">/view/1</a> - id is passed<br />
<a href="#/view/"> /view/ </a> - is is missing - OPTIONAL like <br />
<a href="#/view">  /view  </a> - url matching the view_root

// ui-sref
<a ui-sref="view({inboxId:2})">    - id is passed<br /> 
<a ui-sref="view">                 - is is missing - OPTIONAL like
<a ui-sref="view({inboxId:null})"> - id is explicit NULL <br />
<a ui-sref="view_root()">          - url matching the view_root
Run Code Online (Sandbox Code Playgroud)

我们不必使用?将参数标记为可选.只是两个url必须是唯一的(例如/view/:idvs /view- 其中第二个没有尾随/)