2016-06-21 56 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中定義。見上面的編輯。