Effacer l'Historique et Recharger la Page Connexion/Déconnexion à l'Aide Ionique Cadre

je suis nouvelle dans le développement d'applications mobiles avec Ionique. Lors de la connexion et de la déconnexion, je dois recharger la page, afin de rafraîchir les données, cependant, $state.go('mainPage') ramène l'utilisateur à la vue sans recharger - le contrôleur derrière elle n'est jamais invoquée.

y a-t-il un moyen de clarifier l'histoire et de recharger L'état en ionique?

79
demandé sur fragilewindows 0000-00-00 00:00:00

14 réponses

Bienvenue à la cadre de! En fait, le routage dans Ionic est alimenté par ui-router . Vous devriez probablement vérifier cette question SO précédente pour trouver un couple de différentes façons d'accomplir ceci.

si vous voulez simplement recharger l'état vous pouvez utiliser:

$state.go($state.current, {}, {reload: true});

Si vous voulez recharger la page (comme dans, vous voulez re-bootstrap tout) alors vous pouvez utiliser:

$window.location.reload(true)

bonne chance!

122
répondu JimTheDev 2017-05-23 12:10:45

j'ai trouvé que la réponse de JimTheDev ne fonctionnait que lorsque la définition de l'État avait cache:false ensemble. Avec la vue en cache, vous pouvez faire $ionicHistory.clearCache() et ensuite $state.go('app.fooDestinationView') si vous naviguez d'un État à l'autre qui est en cache mais a besoin de rafraîchissement.

voir ma réponse ici car il exige un changement simple à ionique et j'ai créé une demande de traction: https://stackoverflow.com/a/30224972/756177

25
répondu ABCD.ca 2017-05-23 12:10:45

la bonne réponse:

$window.location.reload(true);
18
répondu EpokK 2014-08-19 10:43:22

j'ai trouvé une solution qui m'a aidé à le faire. Mettre cache-view="false" sur ion-view a résolu mon problème.

<ion-view cache-view="false" view-title="My Title!">
  ....
</ion-view>
18
répondu Rajeshwar 2015-08-22 13:50:48

rechargez la page n'est pas la meilleure approche.

vous pouvez gérer les événements de changement d'État pour recharger les données sans recharger la vue elle-même.

lire sur ionicView cycle de vie ici:

http://blog.ionic.io/navigating-the-changes /

et gérer l'événement avant de recharger les données.

$scope.$on('$ionicView.beforeEnter', function(){
  // Any thing you can think of
});
11
répondu ezain 2016-01-10 15:43:50

dans mon cas, je dois juste effacer la vue et redémarrer le contrôleur. Je pourrais obtenir mon intention avec cet extrait:

$ionicHistory.clearCache([$state.current.name]).then(function() {
  $state.reload();
}

le cache fonctionne toujours et semble que seule la vue est effacée.

ionic --version dit 1.7.5.

6
répondu glaucomorais 2016-06-05 13:28:35

aucune des solutions mentionnées ci-dessus ne fonctionnait pour un nom d'hôte différent de localhost !

j'ai dû ajouter notify: false à la liste des options que je passe à $state.go , pour éviter d'appeler les auditeurs de changement angulaire, avant que l'appel $window.location.reload soit appelé. Le code Final ressemble à:

$state.go('home', {}, {reload: true, notify: false});

>>> MODIFIER - $timeout peut être nécessaire en fonction de votre navigateur > > >

$timeout(function () { $window.location.reload(true); }, 100);

< < FIN DE L'ÉDITION < < <

pour en savoir plus sur ui-référence routeur .

1
répondu Majid Mallis 2016-12-20 21:15:35

j'essayais de rafraîchir la page en utilisant angularjs quand j'ai vu des sites Web j'ai été confus mais aucun code ne fonctionnait pour le code puis j'ai obtenu la solution pour recharger la page en utilisant

$state.go('path',null,{reload:true});

utiliser cette fonction.

0
répondu Krishnaraj 2015-10-14 09:01:40

j'avais besoin de recharger l'État pour faire fonctionner les barres de défilement. Ils n'ont pas fonctionné en passant par un autre État - "enregistrement". Si l'application a été fermée de force après l'enregistrement et a ouvert à nouveau, c'est-à-dire qu'elle est allée directement à l'état "d'origine", les barres de défilement ont fonctionné. Aucune des solutions ci-dessus n'a fonctionné.

après l'enregistrement, j'ai remplacé:

$state.go("home");

avec

window.location = "index.html"; 

L'application rechargé, et les barres de défilement travaillé.

0
répondu Tom Andraszek 2015-12-29 00:17:58

le contrôleur est appelé une seule fois, et vous devez préserver ce modèle logique, ce que je fais habituellement est:

je crée une méthode $scope.reload(params)

au début de cette méthode j'appelle $ionicLoading.show({template:..}) pour montrer mon spinner personnalisé

quand le processus de rechargement de may est terminé, je peux appeler $ionicLoading.hide() comme un callback

enfin, à L'intérieur du bouton Rafraîchir, j'ajoute ng-click = "reload(params)"

le seul inconvénient de cette solution est que vous perdez le système ionique d'histoire de navigation

Espérons que cette aide!

0
répondu Nourdine Alouane 2016-07-05 15:55:09

si vous voulez recharger après le changement de vue, vous devez

$state.reload('state',{reload:true});

si vous voulez faire de cette vue la nouvelle "racine", vous pouvez dire ionic que la prochaine vue, il va être la racine

 $ionicHistory.nextViewOptions({ historyRoot: true });
 $state.go('app.xxx');
 return;

si vous voulez faire recharger vos controllers après chaque changement de vue

app.config(function ($stateProvider, $urlRouterProvider, $ionicConfigProvider) {

$ionicConfigProvider.views.maxCache(0);
0
répondu EduLopez 2017-02-05 23:38:26

.de l'état(url: '/url', contrôleur: Ctl, templateUrl: 'modèle.html', cache: false) cache: false ==> résolu mon problème !

0
répondu Mohammed BOUTCHEKKOUCHT 2017-04-14 15:57:07

comme l'a souligné @ezain recharger les contrôleurs seulement quand c'est nécessaire. Une autre façon plus propre de mettre à jour les données lors d'un changement d'état plutôt que de recharger le contrôleur est d'utiliser des événements de diffusion et d'écouter de tels événements dans les contrôleurs qui ont besoin de mettre à jour les données sur les vues.

exemple: dans vos fonctions login / logout vous pouvez faire quelque chose comme cela:

$scope.login = function(){
    //After login logic then send a broadcast
    $rootScope.$broadcast("user-logged-in");
    $state.go("mainPage");
};
$scope.logout = function(){
   //After logout logic then send a broadcast
   $rootScope.$broadcast("user-logged-out");
   $state.go("mainPage");
};

maintenant dans votre controller page principale changements dans la vue en utilisant la fonction $on pour écouter la diffusion dans le contrôleur mainPage comme suit:

$scope.$on("user-logged-in", function(){
     //update mainPage view data here eg. $scope.username = 'John';
});

$scope.$on("user-logged-out", function(){
    //update mainPage view data here eg. $scope.username = '';
});
0
répondu Dev 2017-09-11 19:44:50

j'ai essayé plusieurs méthodes, mais j'ai trouvé que cette méthode est absolument correcte:

$window.location.reload();

espérons que cette aide d'autres coincé pendant des jours comme moi avec la version: angulaire 1.5.5, ionique 1.2.4, angulaire-ui-routeur 1.0.0

-2
répondu grabtasker 2016-04-21 10:02:28