2013-12-12 10 views
9

mam stan zdefiniowany następująco:Zatrzymaj kątowy ui-router od ponownego wczytania szablonu i kontrolera stanu, jeśli zmieniają się tylko parametry?

.state("root.home.foo", { 
    url: "/foo/:id", 
    templateUrl: "/static/partials/home.foo.html", 
    controller: 'FooCtrl' 
}) 

Kiedy w takim stanie, że odpowiedzi na kliknięcie myszą, chcąc zmienić parametr ...

$state.go('root.home.foo', { id: newId }); 

Ale ja dostaję migotania jak to ponownie wczytuje szablon stanu i ponownie tworzy kontroler. Czy mogę to zrobić, aby kontroler nie był odtwarzany? Może reagować na zdarzenie $stateChangeSuccess i to wszystko, czego potrzebuję.

Aktualizacja

Po sugestii Jasona, próbowałem sub-stan. To działa.

.state("root.home.foo", { 
    abstract: true, 
    url: "/foo", 
    templateUrl: "/static/partials/home.foo.html", 
    controller: 'FooCtrl' 
}) 
.state("root.home.foo.itemSelected", {   
    url: "/:foo" 
}) 

Słuchanie przypadku $stateChangeSuccess ...

// In controller's constructor 
$scope.$on('$stateChangeSuccess', function (e, to, toParams, from, fromParams) { 
    if ($state.current.name == 'root.home.foo.itemSelected') {  
    handleSelection(toParams.id); 
    } 
}); 
+1

Czy można zagnieździć stan poniżej? "root.home.foo.stuffThatChangesWithId" Wtedy tylko "rzeczy, które zmieniają się wraz z id" będą musiały "migotać", co od czasu zmiany prawdopodobnie i tak będzie. Możesz nawet używać nazwanych widoków ui, jeśli są to rozproszone lokalizacje. – Jason

+0

Kolejna myśl. Aby obejść ten problem, należy wykonać ręczną zmianę adresu za pomocą usługi lokalizacji $ i osobno zmienić parametry ręcznie, aby em wszystkie były synchronizowane? Nie jestem pewien, czy spowodowałoby to zmianę stanu, czy nie. – Jason

+0

Dzięki, wypróbuję tę pierwszą sugestię i zaktualizuję ją później. –

Odpowiedz

1

Spróbuj ustawić reloadOnSearch: false w definicji trasy. Np .:

.state("root.home.foo", { 
    url: "/foo/:id", 
    templateUrl: "/static/partials/home.foo.html", 
    controller: 'FooCtrl', 
    reloadOnSearch: false 
}) 
Powiązane problemy