2016-06-21 6 views
1

Я определил объект params в своем родительском состоянии и хочу присвоить значения свойствам, дочерним состояниям и сохранить это значение в других состояниях. Когда я перехожу к дочерним состояниям, я вижу $ stateParams.property, но после присвоения значения $ stateParams.property значение не сохраняется в следующем состоянии sibling.

.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 пусто в состоянии пользователя, когда я присвоил ему значение в регионе Sibling состояние?

+0

Это объясняется на руководстве ui-router [Важные $ stateParams Gotcha] (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 Имеет ли значение, что значение присваивается в областиController, а не parentController? – neridaj

+0

Вы посмотрели ссылку, которую разместила Эрвальд? В документации показано, как это сделать, используя решение. Вам нужно будет ввести «regionsCountriesInfo» в дочерний контроллер. – James

+0

Я попытался добавить параметр для разрешения и ввода (см. Правки), с тем же результатом «undefined» для обоих дочерних состояний. Что мне не хватает? – neridaj

0

Я думаю, что каждый ребенок создает изолированные переменные, вы пытались перепроверить его ребенку в маршрутизации?

0

Я предполагаю, что проблема заключалась в том, что мне нужно было использовать обычный объект разрешения, поскольку значение, которое мне нужно было сохранить, не было в $ stateParams для начала, т. Е. Оно было определено в областиController. См. Править выше.

Смежные вопросы