无法获取 ui-router 状态参数
-
21-12-2019 - |
题
考虑以下 ui-router 配置:
$stateProvider
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/menu.html",
controller: 'AppCtrl'
})
.state('app.feed', {
url: "/feed",
views: {
'menuContent': {
templateUrl: "templates/feed.html",
controller: "FeedCtrl"
}
}
})
我的应用程序中有以下链接:
<a ui-sref="app.feed({ feedId: 5 })">My Link</a>
我正在尝试获取 feedId
在状态参数中:
angular.module('MyApp').controller('FeedCtrl', function($state) {
console.log($state.params);
});
但不幸的是, $state.params
总是 {}
.
我究竟做错了什么?
额外问题
我预计 FeedCtrl
每次点击链接时都会初始化,即每次状态更改为 app.feed
. 。所以,如果我改变 app.feed
状态和其他状态多次,我期望 console.log
上面运行多次。但是,它看起来像 ui-router 初始化 FeedCtrl
只有一次。为什么?
解决方案
要传递参数 - 我们必须定义它:
.state('app.feed', {
url: "/feed/{feedId}",
views: {
'menuContent': {
templateUrl: "templates/feed.html",
controller: "FeedCtrl"
}
}
在这种情况下,我们将其定义为 {feedId}
在这里查看更多内容
一些例子:
'/user/{id:[^/]*}'
- 与...一样'/user/{id}'
从前面的例子来看。'/user/{id:[0-9a-fA-F]{1,8}}'
- 与前面的示例类似,但仅当 id 参数包含 1 到 8 个十六进制数字时才匹配。'/files/{path:.*}'
- 匹配以“/files/”开头的任何 URL,并将路径的其余部分捕获到参数“path”中。'/files/*path'
- 同上。catch all 的特殊语法。
如果我们确实定义了参数,我们将在不同的状态之间导航 feedId
价值观...我们真的会看到那个控制器 FeedCtrl
被重新实例化。就是这样的 ui-router
被设计
不隶属于 StackOverflow