我正在使用ui-router来表示我的AngularJS应用程序中的状态。在其中我想更改状态而不更改URL(基本上“详细视图”已更新,但这不应影响URL)。
我使用<a ui-sref="item.detail({id: item.id})">
来显示详细信息,但仅当我在url: "/detail-:id"
中指定$stateProvider
这样的网址时才有效。
在我看来,目前的状态只是通过网址定义的。
答案 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
开始的情况答案 2 :(得分:10)
我现在想通了,你需要使用状态的params: ['id']
属性,以便在不使用URL时不删除密钥。