Проблема, з якою я стикаюсь, може бути дотичною, але оскільки 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-контролера).