我使用Angular 1.x和Angular UI路由器 我正在寻找一种在子状态中绑定参数的方法,如下所示:
$stateProvider
.state('parameters', {
url: '/parametres',
templateUrl: 'views/profile/profile.html',
controller: 'profileCtrl'
})
.state('parameters.personal', {
url: '/informations-personnelles',
params: {tab: 'personal'}
})
.state('parameters.email', {
url: '/mails',
params: {tab: 'email'}
})
.state('parameters.password', {
url: '/mot-de-passe',
params: {tab: 'password'}
});
当我尝试访问/parametres/mot-de-passe
时,我的tab
参数返回undefined
值,就好像它不是绑定一样。我还试图在tab
状态下绑定parameters
param,但是param返回了我绑定的值。不是那个处于好孩子状态的那个......
我正在寻找一种方法,可以在我打开子URL时立即获得良好的tab
参数值。
感谢您提供任何帮助。
答案 0 :(得分:0)
儿童州从父母那里继承他们的参数。因此,如果您没有在父母中命名,那么他们就不会在孩子身上。在您的情况下,看起来您有3个子状态,但不在父状态。此外,你说你试图访问一个不存在的状态,这可能是你没有得到你期望的另一个原因。
答案 1 :(得分:0)
使用$state.params
代替$stateParams
。您应该能够访问前者的所有参数。
这里唯一需要注意的是确保你的参数具有不同的名称,这样你就不会发生冲突。
答案 2 :(得分:0)
可能会发生这种情况,因为在您的父控制器中,您传递了一些值,但在父控制器中没有解析相同的值。
所以父控制器$stateParams.someVal
如果子控制器中不存在那么它将抛出undefined。
所以你必须把resolve属性放在父状态,如:
$stateProvider.state('contacts.detail', {
url: '/contacts/:contactId',
controller: function($stateParams){
$stateParams.contactId //*** Exists! ***//
},
resolve:{
contactId: ['$stateParams', function($stateParams){
return $stateParams.contactId;
}]
}
}).state('contacts.detail.subitem', {
url: '/item/:itemId',
controller: function($stateParams, contactId){
contactId //*** Exists! ***//
$stateParams.itemId //*** Exists! ***//
}
})
上面的内容你需要这样做
请在此处查看:https://github.com/angular-ui/ui-router/wiki/URL-Routing