J'implémente une sorte de flux de travail dynamique et quand j'atteins un certain point, je dois recharger mon état pour rendre le HTML et réinstancier le contrôleur afin de continuer.

Ce que j'ai trouvé, c'est que la deuxième fois que j'appelle $state.reload() ne fonctionne pas. Est-ce le comportement souhaité? Que puis-je faire pour forcer ce rechargement?

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

Je vérifie ma console et le fichier console.log est toujours imprimé mais mon relevé self.$state.reload() ne s'exécute correctement que la première fois que je l'appelle.

ÉDITER:

J'ai remarqué que mon URL change lors du premier rechargement et passe à l'URL parent. Cela doit être le problème car la troisième fois, il ne recharge que le parentState. Je ne sais pas comment résoudre ce problème

La première fois que cela fonctionne correctement, mon URL est:

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

Après avoir utilisé le rechargement et tout a fonctionné, il passe à l'état parent.

http://localhost:1234/app/parentstate

Ainsi, lorsque je recharge à nouveau, il ne recharge que la vue parent. Je définis mes itinéraires comme suit.

.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';
    }
  })
)

Je vous remercie

1
acostela 9 août 2016 à 15:47

3 réponses

Meilleure réponse

Je l'ai résolu! Le problème était avec mon implémentation de modalState. J'ai une fonction OnEnter qui se déplace automatiquement vers mon état parent si mon état est le même ou si je le ferme.

        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
        }
      });

Changer cela a résolu mon problème. Merci pour vos réponses

0
acostela 10 août 2016 à 07:30

J'ai compris !

$state.reload(); 

Est un alias pour

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

"reload: true" rafraîchit l'état parent! vous devez donc éviter d'utiliser "$ state.reload"

Essayez plutôt

window.location.reload(true)
0
DMCISSOKHO 9 août 2016 à 15:28

Vous devriez peut-être essayer quelque chose comme

$state.transitionTo('current_state', null, {'reload':true});
0
DMCISSOKHO 9 août 2016 à 14:01