考虑以下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
一次。为什么呢?
答案 0 :(得分:6)
要传递参数 - 我们必须定义它:
.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:.*}'
- 匹配以&#39; / files /&#39;开头的所有网址并将剩下的路径捕获到参数&#39; path&#39;。'/files/*path'
- 同上。赶上所有的特殊语法。如果我们确实已经定义了参数,并且我们将在具有不同feedId
值的状态之间导航......我们将真正看到,该控制器FeedCtrl
被重新实例化。这就是ui-router
的设计方式