Angular UI路由器子状态参数

时间:2017-03-07 13:29:45

标签: angularjs angular-ui-router

我使用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参数值。

感谢您提供任何帮助。

3 个答案:

答案 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