Я впервые пытаюсь использовать ui-router.
Вот мой app.js
angular.module('myApp', ['ionic'])
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
});
})
.config(function($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise("/index.html");
$stateProvider.state('index', {
url: '/'
template: "index.html",
controller: 'loginCtrl'
});
$stateProvider.state('register', {
url: "/register"
template: "register.html",
controller: 'registerCtrl'
});
})
Как видите, у меня два состояния. Я пытаюсь зарегистрировать такое состояние:
<a ui-sref="register">
<button class="button button-balanced">
Create an account
</button>
</a>
Но я получаю
Не удалось разрешить "регистр" из состояния ""
исключение. В чем проблема?
Ответы:
Этот вид ошибки обычно означает, что некоторые части (JS) кода не были загружены. То состояние, которое находится внутри,
ui-sref
отсутствует.Есть рабочий пример
Я не эксперт в ионных технологиях, поэтому этот пример должен показать, что он будет работать, но я использовал еще несколько приемов (родительский элемент для вкладок)
Это немного измененное состояние def:
И вот у нас есть родительский вид с вкладками и их содержимым:
Возьмите это больше, чем пример того, как заставить его работать, а затем правильно использовать ионную структуру ... Посмотрите этот пример здесь
Вот аналогичные вопросы и ответы с примером использования именованных представлений (наверняка лучшее решение) проблема ионной маршрутизации, показывает пустую страницу
Улучшенная версия с именованными представлениями на вкладке находится здесь: http://plnkr.co/edit/Mj0rUxjLOXhHIelt249K?p=preview
таргетинг на именованные представления:
источник
.run ($state) { console.log($states.get()); });
Просто пришла сюда, чтобы поделиться тем, что со мной происходит.
Вам не нужно указывать родителя, состояния работают документально, поэтому вместо указания parent: app вы можете просто изменить состояние на app.index
ИЗМЕНИТЬ Предупреждение, если вы хотите углубиться во вложение, я должен указать полный путь. Например, у вас не может быть такого состояния, как
не имея
или angular выдаст исключение, в котором говорится, что он не может определить маршрут. Чтобы решить эту проблему, вы можете определить абстрактные состояния
источник
EDIT Warning, if you want to go deep in the nesting, the full path must me specified. For example, you can't have a state like
, это была моя проблема.url
свойство среднего состояния, а затем следующий маршрутurl
будет добавлен к URL предыдущего маршрута.У меня была такая же проблема с Ionic.
Оказалось, что с моим кодом все было в порядке, мне просто пришлось выйти из сеанса ионной подачи и снова запустить ионную службу.
После возврата в приложение мои состояния работали нормально.
Я также предлагаю несколько раз нажать save в файле app.js, если вы используете gulp, чтобы убедиться, что все будет повторно скомпилировано.
источник
Была такая же проблема с ионной маршрутизацией.
Простое решение - использовать название штата - в основном
state.go(state name)
И в контроллере вы можете использовать
$state.go('tab.search');
источник
У меня был случай, когда ошибка была вызвана
Что очевидно. Думаю, это может кому-то помочь в будущем.
источник
Как ответил Маг:
Абстрактные состояния можно использовать для добавления префикса ко всем URL-адресам дочерних состояний. Но обратите внимание, что abstract по-прежнему нуждается в пользовательском интерфейсе для заполнения его дочерними элементами . Для этого вы можете просто добавить его в строку.
Для получения дополнительной информации см. Документацию: https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views
источник