AngularJS ui-router 可选参数

标签 angularjs angular-ui-router

我试着像这样设置我的路由

...
url: '/view/:inboxId?'
...

但是 Angular 会抛出这个错误:
Error: Invalid parameter name '' in pattern '/view/:inboxId?'

所以基本上我必须设置两个不同的状态:
state('view', {
            url: '/view/:inboxId',
            templateUrl: 'templates/view.html',
            controller: 'viewCtrl'
        }).

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

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

最佳答案

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

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

// 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

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

关于AngularJS ui-router 可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25476933/

相关文章:

javascript - Angular uiRouter 在新窗口或带有 stateParams 的选项卡中打开状态

javascript - Angular JS IE9 Hashbang url 重写

angularjs - 如何使用 $state.go toParams 和 $stateParams 发送和检索参数?

javascript - Angular UI Router-在 url 中插入参数

ruby-on-rails - 在 Rails 中没有 # 的 Angular URL

angularjs - 为什么 Yeoman AngularFire 生成器从一开始就无法工作?

angularjs - Angular $q 返回 promise 多次 $http 调用

javascript - AngularJS <select> 来自 AJAX 调用的 <option> 的两种方式数据绑定(bind)

使用相同 url 的不同角色的 Angularjs ui-router 授权和身份验证

html - 如何使用 Angular 确定 html 表的第一行?