2016-06-21 121 views
1

我已经在我的父状态上定义了一个params对象,并且想要为这些属性,子状态指定值,并且将该值保留到其他状态。当我导航到子状态时,我看到$ stateParams.property,但是在给$ stateParams.property赋值后,该值不会持续到下一个兄弟状态。

.state({ 
    name: 'parent', 
    url: '/parent', 
    templateUrl: 'app/parent.html', 
    controller: 'parentController', 
    controllerAs: 'vm', 
    resolve: { 
     user: function(){ 
     return { user: {} }; 
     }, 
     //regionsCountriesInfo: ['$stateParams', function($stateParams){ 
     // return $stateParams.regionsCountriesInfo; 
     //}], 
     // edit 
     regionsCountriesInfo: function(){ 
     return { value: [] }; 
     } 
    }, 
    children: [ 
     { 
     name: 'region', 
     url: '/region', 
     templateUrl: 'app/region.html', 
     controller: 'regionController', 
     controllerAs: 'vm', 
     ncyBreadcrumb: { 
      label: 'Regions', 
      parent: 'parent' 
     }, 
     resolve: { 
      user: function(user) { 
      return user; 
      }, 
      // edit 
      regionsCountriesInfo: function(regionsCountriesInfo) { 
      return regionsCountriesInfo; 
      } 
     } 
     }, 
     { 
     name: 'user', 
     url: '/user', 
     templateUrl: 'app/user.html', 
     controller: 'userController', 
     controllerAs: 'vm', 
     ncyBreadcrumb: { 
      label: 'Users', 
      parent: 'parent' 
     }, 
     resolve: { 
      user: function(user) { 
      return user; 
      }, 
      // edit 
      regionsCountriesInfo: function(regionsCountriesInfo) { 
      return regionsCountriesInfo; 
      } 
     } 
     }, 

// regionController 
regionController.$inject = [ 
'$scope', 
'$translate', 
'$uibModal', 
'$state', 
'$stateParams', 
'$rootScope', 
'regionsCountriesInfo' 
]; 

function regionController($scope, $translate, $uibModal, $state, $stateParams, $rootScope, regionsCountriesInfo) { 
    ... 
    vm.selectedRegions = []; 
    ... 
    vm.selectedRegions.push(region) 
    console.log('regionController regionsCountriesInfo'); 
    console.log(regionsCountriesInfo); 
    regionsCountriesInfo = vm.selectedRegions; 
    console.log('regionController regionsCountriesInfo'); 
    console.log(regionsCountriesInfo); 

// regionController console output 
regionController regionsCountriesInfo 
undefined 
regionController regionsCountriesInfo 
[Object] 

// userController 
userController.$inject = [ 
'$translate', 
'$uibModal', 
'$state', 
'$scope', 
'$timeout', 
'$stateParams', 
'$rootScope', 
'regionsCountriesInfo' 
]; 
function userController($translate, $uibModal, $state, $scope, $timeout, $stateParams, $rootScope, regionsCountriesInfo) { 
    ... 
    console.log('userController regionsCountriesInfo'); 
    console.log(regionsCountriesInfo); 

// userController console output 
userController regionsCountriesInfo 
undefined 

为什么$ stateParams.regionsCountriesInfo空的用户状态,当我在该地区的同级状态赋值给它?

+0

这是在ui路由器指南[重要$ stateParams陷阱](https://github.com/angular-ui/ui-router/wiki/URL-Routing#important-stateparams-gotcha)解释 – Erevald

回答

1

由于$ stateparams仅包含以该状态注册的参数,所以需要使用父状态下的解析。

state({ 
    name: 'parent', 
    url: '/parent', 
    templateUrl: 'app/parent.html', 
    controller: 'parentController', 
    controllerAs: 'vm', 
    resolve: { 
     regionsCountriesInfo: ['$stateParams', function($stateParams){ 
      return $stateParams.regionsCountriesInfo; 
     }] 
    } 
+0

仍然无法正常工作。在userController $ stateParams.regionsCountriesInfo:undefined是否值得在regionController而不是parentController中赋值? – neridaj

+0

你看过Ervald发布的链接了吗?该文档显示了如何使用解决方案执行此操作。您需要将'regionsCountriesInfo'注入到子控制器中。 – James

+0

我尝试添加参数来解析和注入(请参阅编辑),对于两个子状态都有相同的结果'undefined'。我错过了什么? – neridaj

0

我认为每个孩子都会创建孤立的变量,您是否尝试将它重新分配给子路由?

0

我想问题是我需要使用常规的解析对象,因为我需要坚持的值不在$ stateParams中,即它在regionController中定义。见上面的编辑。