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

我正在使用ui-router在AngularJS应用程序中表示状态。 在这里我想改变状态而不改变URL(基本上“更新详细信息”,但这不应该影响URL)。

我使用<a ui-sref="item.detail({id: item.id})">来显示详细信息,但是这只有在我的$stateProvider指定一个类似url: "/detail-:id"

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

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

在我的具体问题有一个复杂的因素,因为我需要注入一个非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数组中声明它。 在上面的例子中,parentParam必须包含在childstate中。

如果你不这样做,那么应用程序初始化时将引发模块错误。 在撰写本文时最新版本(v.0.2.10)至less是真的。

编辑

@ gulsahkandemir指出

参数在状态定义中的声明已经变成params:{'id'] params:{id:{}}

从更新日志来看,这似乎是从v0.2.11开始的情况

参数的细节可以在官方文档中find

只是这个职位的新来者的附加信息:

参数在状态定义中的声明已经变成params: { id: {} } params: ['id'] params: { id: {} }

所以请注意:)

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

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