2013-10-25 16 views
7

Przełączyłem się na ui-router. Wszystko poszło gładko, z wyjątkiem jednej rzeczy. Na mojej stronie mam wybór, który zmienia kontekst aplikacji. Zresztą wcześniej, kiedy to został zmieniony kontekst byłem wykonaniu tego kodu (w szczególności ustawić metoda):

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

i

$route.reload() 

robił najważniejsze. Ponownie załadował stronę. Ale po przełączeniu na routery ui, $ route.reload nic nie robi. Również nie znalazłem odpowiednika w API interfejsu użytkownika. Jak rozwiązać ten problem?

+0

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

+0

Nie. Jak mogę uzyskać dostęp do bieżącego stanu? – dragonfly

+1

Musisz wstrzyknąć usługę '$ state' tak jak robisz' $ route', a następnie możesz wywołać tę metodę. Zobacz dokumentację https://github.com/angular-ui/ui-router/wiki/Quick-Reference#stategoto--toparams--options – Chandermani

Odpowiedz

5

OK działa po wprowadzeniu stanu $ do kontrolera.

Ale kiedy wstrzyknięcie go do serwisu, jak fragment kodu, oczywiście stan $ był niezdefiniowany.

Chociaż

$state.go('.') 

nie działa, zrobiłem coś takiego:

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

a kiedy trzeba przeładować zrobić coś takiego:

$state.transitionTo('home'); 

wewnątrz oscyloskopu metoda.

+0

+1 za skierowanie mnie do przejściaTo(). – Jesse

36

Jak o:

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

To zadziałało dla mnie! – bobber205

+0

Nie powinno to być $ state.go ($ state.current, null, {reload: true}); ? –

0

miałem podobny problem, gdzie chciałem link poza kontrolerem aby odświeżyć stan i właśnie utworzony reload() funkcję kontrolera.

SomeCtrl:

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

Dodaj to do swojej kotwicy:

ng-click="reload()" 

H/T @dragonfly za wskazanie mi transitionTo().

7

Można zrobić $state.reload()

Jest to błąd z nim czasami nie ponownie instancji kontrolera. można obejść, że z

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

Jedyne pracował dla mnie:

Tworzenie przekierować stan:

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

Go do tego stanu:

$state.go('redirect', {to: $state.current.name}, {reload: true}); 
Powiązane problemy