$ state.reload()移动到父$ $状态

时间:2016-08-09 12:47:58

标签: javascript angularjs angular-ui-router

我正在实施某种动态工作流程,当我达到某一点时,我必须重新加载我的状态以呈现HTML并重新启动控制器才能继续。

我发现的是我第二次拨打$state.reload()时无效。这是理想的行为吗?我该怎么做才能强制重新加载?

if(advanceComplexAction()) {
  console.log(self.$state); //This is always been printed in console
  self.$state.reload();
}
else {
  closeActionWizard();
}

我正在检查我的控制台,并且始终打印console.log,但我的语句self.$state.reload()仅在我第一次调用它时才能正确运行。

编辑:

我注意到当我第一次重新加载并更改为父URL时,我的网址发生了变化。这一定是问题,因为它第三次只重新加载parentState。我不知道如何解决这个问题

第一次正常工作我的网址是:

http://localhost:1234/app/parentstate/childstate

使用重新加载后,一切正常,它会转移到父状态。

http://localhost:1234/app/parentstate

所以当我再次重新加载时,它只会重新加载父视图。我按照以下方式定义了我的路线。

.config(function($stateProvider, modalStateProvider){
  $stateProvider

.state('app.parentstate',
  modalStateProvider.create({
    animation: true,
    name: 'app.parentsate',
    url: 'apps/parentstate',
    controllerAs: 'parentCtrl',
    controller: 'ParentCtrl',
    windowClass: 'semi-modal semi-modal--XXL',
    templateUrl: function() {
      return 'app/ui/apps/parent/parent.html';
    },
    resolve: {
      //Some resolve function
      }]
    }
  })
)
.state('app.parentstate.childstate',
  modalStateProvider.create({
    animation: true,
    name: 'app.parentstate.childstate',
    url: '/childstate',
    controllerAs: 'childWizardCtrl',
    controller: 'ChildWizardCtrl',
    windowClass: 'semi-modal semi-modal--XL',
    templateUrl: function(){
      return 'app/ui/apps/child/child.html';
    }
  })
)

谢谢

3 个答案:

答案 0 :(得分:0)

也许你会尝试像

这样的东西
$state.transitionTo('current_state', null, {'reload':true});

答案 1 :(得分:0)

我懂了!

$state.reload(); 

的别名
$state.transitionTo($state.current, $stateParams, { reload: true, inherit: false, notify: true }); 

“reload:true”刷新父状态!所以你需要避免使用“$ state.reload”

尝试改为

window.location.reload(true)

答案 2 :(得分:0)

我解决了!问题出在我的modalState实现上。我有一个OnEnter函数,如果我的状态相同或者我关闭它,它会自动移动到我的父状态。

        modalInstance.result
      .then(function(result) {
        $log.debug('Modal result', result);
      }, function(rejection) {
        $log.debug('Modal dismissed at: ' + new Date() + ' because ' + rejection);
      })
      .finally(function() {
        modalInstance = null;
        if ($state.$current.name === options.name) {
          $state.go('^', $stateParams, { reload: options.reload }); //Here we are moving to parent state
        }
      });

更改此问题解决了我的问题。感谢您的回复