2013-10-25 3 views
7

Ich habe zu ui-router gewechselt. Alles lief reibungslos, bis auf eine Sache. Auf meiner Seite habe ich eine Auswahl, die den Kontext der Anwendung ändert. Wie auch immer, vorher, wenn dieser Kontext geändert wurde ich diesen Code ausgeführt wurde (insbesondere eingestellt -Methode):

'use strict'; 
angular.module('main').factory('lacContext', ['$route', function ($route) { 
    return { 
     set: function (id) { 
      sessionStorage.setItem("lac-context", id); 
      $route.reload(); 
     }, 
     get: function() { 
      return sessionStorage.getItem("lac-context"); 
     } 
    }; 
}]) 

und

$route.reload() 

war das Wichtigste zu tun. Es lud die Seite neu. Aber nach dem Wechsel zu ui-router tut $ route.reload nichts. Ich habe auch kein Gegenstück in der ui-router API gefunden. Wie kann ich dieses Problem lösen?

+0

Haben Sie tri ed '$ state.go ('.')'? – Chandermani

+0

Nein. Wie kann ich auf den aktuellen Status zugreifen? – dragonfly

+1

Sie müssen den Dienst '$ state' injizieren, wie Sie' $ route', dann können Sie diese Methode aufrufen. Siehe Dokumentation https://github.com/angular-ui/ui-router/wiki/Quick-Reference#stategoto--toparams--options – Chandermani

Antwort

5

Ok, es funktioniert, wenn ich $ State in den Controller injizieren.

Aber wenn es wie Code-Schnipsel in den Dienst injiziert wurde, war $ state natürlich nicht definiert.

Obwohl

$state.go('.') 

nicht funktionierte, ich habe so etwas wie dies:

$stateProvider 
     .state('home', { 
      controller: function ($state) { 
       $state.go('advisoryLeadOffering.packages'); 
      } 
     }) 
     .state('advisoryLeadOffering.packages', { 
      url: "/packages", 
      templateUrl: "/AdvisoryLeadOffering/Packages", 
      controller: 'AdvisoryLeadOfferingPackages' 
     }) 

und wenn ich mich so etwas wie dieses nachladen muß:

$state.transitionTo('home'); 

innen Rahmen des Methode.

+0

+1 für mich auf TransitionTo(). – Jesse

36

Wie wäre:

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

Das hat bei mir funktioniert! – bobber205

+0

Sollte es nicht sein $ state.go ($ state.current, null, {reload: true}); ? –

0

Ich hatte ein ähnliches Problem, bei dem ich einen Link außerhalb des Controllers einen Zustand wollte und gerade erstellt eine reload() Funktion in der Steuerung zu aktualisieren.

SomeCtrl:

$scope.reload = function(){ 
    $state.transitionTo('myState'); 
} 

Fügen Sie diese auf Ihren Anker:

ng-click="reload()" 

H/T @dragonfly für mich transitionTo() zeigen.

7

Sie können manchmal nicht wieder Instanziieren den Controller mit ihm einen Fehler $state.reload()

Es gibt zu tun. Sie können rund um die bekommen mit

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

Das einzige, was für mich gearbeitet:

Zustand erstellen umleiten:

$stateProvider.state('redirect', { 
    url: 'redirect/:to', 
    controller: function($state, $stateParams, $scope) { 
     $state.go($stateParams.to, null, {reload: true}); 
    } 
}); 

Zum diesem Zustand:

$state.go('redirect', {to: $state.current.name}, {reload: true}); 
Verwandte Themen