AngularJS的ui-router中没有URL的状态的参数

时间:2014-04-02 14:25:19

标签: angularjs angular-ui-router

我正在使用ui-router来表示我的AngularJS应用程序中的状态。在其中我想更改状态而不更改URL(基本上“详细视图”已更新,但这不应影响URL)。

我使用<a ui-sref="item.detail({id: item.id})">来显示详细信息,但仅当我在url: "/detail-:id"中指定$stateProvider这样的网址时才有效。

在我看来,目前的状态只是通过网址定义的。

3 个答案:

答案 0 :(得分:46)

这篇文章的新成员的其他信息:

州定义中的参数声明已从params: { id: {} }

更改为params: ['id']

请注意:)

来源:http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$stateProvider

答案 1 :(得分:41)

感谢您的回答,它确实帮助了我正确的方向,但我想添加更完整的说明。

在我的具体问题中,有一个复杂的因素,因为我需要注入一个非URL参数的状态是一个子状态。这有点复杂。

params: ['id']部分进入$stateProvider声明,如下所示:

$stateProvider.state('parent', {
    url: '/:parentParam',
    templateUrl: '...',
    controller: '...'
}).
state('parent.child', {
    params: ['parentParam','childParam'],
    templateUrl: '...',
    controller: '...'
});

并且param名称与ui-sref属性相关联,如下所示:

<a ui-sref=".child({ childParam: 'foo' })">

问题是:

  

如果父状态也有URL参数,则子需要   也在其params数组中声明。在上面的示例中,#34; parentParam&#34;必须包含在子女状态中。

如果您不这样做,则在初始化应用程序时将抛出模块错误。在撰写本文时(v.0.2.10),最新版本至少是这样。

修改

@gulsahkandemir指出

  

州定义中的参数声明已更改为参数:{   id:{}}来自参数:[&#39; id&#39;]

根据更改日志判断,这似乎是从v0.2.11

开始的情况

参数详情can be found in the official docs

答案 2 :(得分:10)

我现在想通了,你需要使用状态的params: ['id']属性,以便在不使用URL时不删除密钥。