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);
}
});
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
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
Dzięki, wypróbuję tę pierwszą sugestię i zaktualizuję ją później. –