332 votes

Angular JS - Angular UI Router - Rechargement de l'état actuel - rafraîchir les données

Je suis Angulaire à l'aide de l'INTERFACE utilisateur du Routeur et souhaitez recharger l'état actuel et l'actualisation de toutes les données / re-exécuter les contrôleurs de l'état actuel et celle du parent.

J'ai 3 etat: répertoire.des organisations.détails

répertoire.les organisations contient une table avec une liste d'organisations. En cliquant sur un élément dans le tableau des charges répertoire.des organisations.les détails avec $StateParams en passant l'ID de l'élément. Ainsi, dans les détails de l'état-je charger les détails concernant ce point, les modifier puis enregistrer les données. Tout va bien jusqu'à présent.

Maintenant, j'ai besoin de le recharger à cet état et à actualiser toutes les données.

J'ai essayé:

 $state.transitionTo('directory.organisations');

Qui va à la mère-patrie, mais ne recharge pas le contrôleur, j'imagine, parce que le chemin n'a pas changé. Idéalement, je veux juste rester dans le répertoire.des organisations.détails de l' etat et de l'actualisation de toutes les données dans le parent.

J'ai aussi essayé:

$state.reload()

J'ai vu cela sur l'API WIKI pour $état.recharger "(bug avec les contrôleurs de reinstantiating droit maintenant, la fixation bientôt)."

Toute aide serait appréciée?

575voto

Rohan Points 1484

J'ai trouvé que c'était le moyen de travail le plus court pour rafraîchir avec ui-router:

 $state.go($state.current, {}, {reload: true}); //second parameter is for $stateParams
 

154voto

Holland Risley Points 711

Cette solution fonctionne dans AngularJS V.1.2.2:

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

68voto

M K Points 510

Ce serait la solution finale. (inspiré par le post de @ Hollan_Risley)

 'use strict';

angular.module('app')

.config(function($provide) {
    $provide.decorator('$state', function($delegate, $stateParams) {
        $delegate.forceReload = function() {
            return $delegate.go($delegate.current, $stateParams, {
                reload: true,
                inherit: false,
                notify: true
            });
        };
        return $delegate;
    });
});
 

Maintenant, chaque fois que vous avez besoin de recharger, appelez simplement:

 $state.forceReload();
 

3voto

thanos panousis Points 169

Pour angulaire v1.2.26, aucun des travaux ci-dessus. Un n-clic qui appelle les méthodes ci-dessus devra être cliqué deux fois pour que l'état se recharge.

J'ai donc fini par émuler 2 clics en utilisant $ timeout.

 $provide.decorator('$state',
        ["$delegate", "$stateParams", '$timeout', function ($delegate, $stateParams, $timeout) {
            $delegate.forceReload = function () {
                var reload = function () {
                    $delegate.transitionTo($delegate.current, angular.copy($stateParams), {
                        reload: true,
                        inherit: true,
                        notify: true
                    })
                };
                reload();
                $timeout(reload, 100);
            };
            return $delegate;
        }]);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X