2016-08-04 147 views
0

我試圖創建一些收件箱應用程序左側的消息列表和右側選定的消息的詳細信息,使用UI-Router來做到這一點。AngularJS UI-Router父狀態重新加載

我已經能夠解決從數據庫中的消息列表中的父狀態子狀態從數據庫解析選定的信息(ID參數)。

問題是:當在消息之間導航(子狀態,正確改變id參數)時,父狀態也被重載(視圖,控制器...和消息列表)。我不想要它,我不明白它爲什麼會發生。

導航 - 第一溶液嘗試(父重新加載)

<a ui-sref="app.messengers.show({id: row.id})"></a> 

導航 - 第二溶液嘗試(父重新加載)

// Solution 2.1 
$state.go('app.messengers.show', {id: id}); 
// Solution 2.2 
$state.transitionTo('app.messengers.show', {id: id}); 

嘗試還添加參數「重載:假「在這兩種解決方案(第一個解決方案的ui-sref-opts,第二個參數的第三個參數):父代重新加載。

UI-路由器

 .state('app.messengers', { // parent state 
      abstract: true,    
      url: '/messenger', 
      templateUrl: 'app/messengers/list.html', 
      controller: 'MessengersController', 
      resolve: { 
       load: ['$ocLazyLoad', function ($ocLazyLoad) { 
        return $ocLazyLoad.load([ 
         'app/messengers/messengerService.js', 
         'app/messengers/messengersController.js' 
        ]); 
       }], 
       messages: ['load', 'MessengerService', function (load, MessengerService) { 
        return MessengerService.list(); 
       }] 
      } 
     }) 
     .state('app.messengers.show', { // child state 
      url: '/:id', 
      templateUrl: 'app/messengers/detail.html', 
      controller: 'MessengerDetailController', 
      params: { 
       id: null 
      }, 
      resolve: { 
       load1: ['$ocLazyLoad', function ($ocLazyLoad) { 
        return $ocLazyLoad.load([ 
         'app/messengers/messengerDetailController.js' 
        ]); 
       }], 
       message: ['load', '$stateParams', 'MessengerService', function (load, $stateParams, MessengerService) { 
        var regexp = new RegExp('^\\d+$'); 
        return (regexp.test($stateParams.id)) ? MessengerService.get($stateParams.id) : null; 
       }] 
      } 
     }) 

回答

0

哦,我的上帝...

我忘了,我是做在$ stateChangeStart(身份驗證目的)一些檢查......如果一切正常:

$state.go(next.name, params, {reload: true}); 

我已經改變了將參數重新加載到next.name。 它的工作原理。

對不起,這樣的女士...

0

試試這個:

$state.go('^. show', {id: id}); 

^意味着父狀態。

+0

剛剛嘗試,沒有改變對我來說。 – Ecorce

相關問題