2016-06-21 11 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-routerガイド[Important $ stateParams Gotcha](https://github.com/angular-ui/ui-router/wiki/URL-Routing#important-stateparams-gotcha)で説明されています。 – Erevald

答えて

1

$ stateparamsにはその状態で登録されたパラメータしか含まれていないため、親状態でresolveを使用する必要があります。

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

まだ動作しません。 in userController $ stateParams.regionsCountriesInfo:undefined値がparentControllerではなくregionControllerで割り当てられることは重要ですか? – neridaj

+0

Ervaldが投稿したリンクを見ましたか?このドキュメントでは、resolveを使用してこれを行う方法を示します。子コントローラに「regionsCountriesInfo」を注入する必要があります。 – James

+0

解決と注入(編集を参照)のためにparamを追加しようとしましたが、両方の子ステートに対して同じ結果 'undefined'が追加されました。私は何が欠けていますか? – neridaj

0

私はそれぞれの子供が孤立した可変物を作成すると思いますが、あなたはそれを子供に伝えようとしましたか?

0

問題は、通常の解決オブジェクトを使用する必要がありました。持続する必要があった値は$ stateParamsには含まれていなかったため、regionControllerで定義されていました。上記の編集を参照してください。

関連する問題