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

aki*_*irk 39 angularjs angular-ui-router

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

我使用的<a ui-sref="item.detail({id: item.id})">显示细节,但如果我指定像一个URL这仅适用url: "/detail-:id"于我$stateProvider.

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

小智 46

这篇文章的新成员只是一个额外的信息:

在状态定义则params的声明已更改为params: { id: {} }params: ['id']

所以要注意:)

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


iva*_*rni 41

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

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

params: ['id']部分在$stateProvider声明中如下:

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

并且param名称连接到ui-sref属性,如下所示:

<a ui-sref=".child({ childParam: 'foo' })">
Run Code Online (Sandbox Code Playgroud)

问题是:

如果父状态也有URL参数,那么子进程 也需要在其params数组中声明它.在上面的示例中,"parentParam"必须包含在childstate中.

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

编辑

@gulsahkandemir指出这一点

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

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

params的详细信息可以在官方文档中找到


aki*_*irk 10

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