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