Проблема, з якою я стикаюсь, може бути дотичною, але оскільки Google потягнув мене до цього питання, це може бути доречним. Проблема отримує свою некрасиву голову для мене при використанні маршрутизатора UI, але лише тоді, коли я намагаюся оновити сторінку кнопкою оновлення браузера. У додатку використовується маршрутизатор користувальницького інтерфейсу з абстрактним станом для батьків, а потім дочірній стан відключається від батьківського. На функції програми run()
є $state.go('...child-state...')
команда. Батьківський стан використовує a resolve
, і спочатку я подумав, що, можливо, дочірній контролер виконується двічі.
Все добре, перш ніж URL-адресу було додано хеш.
www.someoldwebaddress.org
Потім, коли URL-адресу було змінено маршрутизатором інтерфейсу,
www.someoldwebaddress.org#/childstate
... а потім, коли я оновлюю сторінку кнопкою оновлення браузера , $stateChangeStart
запускається двічі, і кожен раз вказує на childstate
.
resolve
На батьківському стані є те , що в два рази стріляли.
Можливо, це хитрість; незалежно, це, як видається, усуває проблему для мене: у області коду, куди $stateProvider
вперше викликається, спочатку перевірте, чи вікно вікна.location.hash порожнє. Якщо є, все добре; якщо його немає, то встановіть window.location.hash на порожній рядок. Тоді здається, що $state
єдині спроби кудись поїхати один раз, а не двічі.
Крім того, якщо ви не хочете покладатися на програму за замовчуванням run
і state.go(...)
, ви можете спробувати зафіксувати хеш-значення та використовувати хеш-значення, щоб визначити стан дитини, на якому ви знаходилися безпосередньо перед оновленням сторінки, і додати умову до області у вашому код, де ви встановили state.go(...)
.
ng-app
з ручним завантажувачем). Також перевірте, чи приєднали ви свій контролер до декількох елементів (за допомогою ng-контролера).