2016-08-04 98 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

相关问题