2013-07-01 15 views
18

jeśli masz sterownik do manipulowania $ zmienne zakresie w angularjs, czy istnieje idiomatycznych sposób:Reinitialize angularjs kontroler

  • zresetować $ zakresu sterownika i
  • restart inicjalizacji sterownik ?

Dla skomplikowanych kontrolerów bardzo wygodne byłoby zresetowanie każdej zmiennej do jej wartości początkowej, szczególnie jeśli to, czego naprawdę chcesz, to prosta reinicjalizacja kontrolera i zakresu. Nawigowanie do tego samego adresu URL ponownie przez $location.path() nie pomaga.

Edycja: załóżmy, że nie można użyć żadnego hakowania $window.location, ponieważ naruszałoby to CSP w aplikacjach Chrome w pakiecie.

Odpowiedz

22

Zaraz po tym, jak zapytałem, w końcu znalazłem sposób na rozwiązanie tego problemu za pomocą $route.reload().

Wciąż myślę, że musi istnieć jakieś bardziej eleganckie rozwiązanie, ale to na pewno działa dla mnie.

+1

Nie zgadzam się, myślę, że jest to doskonale eleganckie rozwiązanie. W pewnym sensie przeładowujesz stronę, więc $ route.reload() ma wiele sensu. – wvdz

+6

@popovitsj: Chociaż świetnie jest wiedzieć, że to nie musi być uważane za złą praktykę, nadal nie jestem do końca przekonany. Chociaż masz absolutną rację, że istnieje pewne odwołanie do tego rozwiązania, ponieważ semantyczne '$ route.reload()' jest podobne do ponownego załadowania strony, nadal wytwarza dużo narzutów. Może to być niezrozumiałe w wielu konkretnych przypadkach użycia (na pewno było wtedy w moim), ale nadal byłoby miło mieć równie czystą metodę, która unika tworzenia tego narzutu. – bfncs

+0

Czy możemy przenieść zawartość oninit w prywatnej metodzie (powiedzmy "init") i wywołać ją z oninit i ostatecznie użyć tej samej prywatnej metody, aby zresetować kontroler tyle razy, ile chcemy? – JVM

2

Jeśli używasz kątowe-UI-router, to należy to zrobić w ten sposób:

myapp.Controller('SampleController', function($state) { 

    $scope.navigate = function (stateName) { 
     if ($state.is(stateName)) { 
      $state.reload(); 
     } else { 
      $state.go(stateName); 
     } 
    } 
}); 
Powiązane problemy