Ionic $state.go не работает на устройстве
В настоящее время я работаю над приложением, которое использует Ionic. Моя проблема в том, что $ state.go работает только в браузере, но не на телефоне. Кажется, это общая проблема, но после прочтения множества ответов на одни и те же вопросы я все еще не могу понять, как это исправить.
Общее исправление заключается в том, чтобы убедиться, что вы используете относительные URL-адреса, как описано здесь: Использование Angular UI-Router с Phonegap, но я до сих пор не могу заставить его работать. Что мне не хватает?
Ссылка на плункер: http://plnkr.co/edit/qFJ1Ld6bhKvKMkSmYQC8?p=preview
Структура App.js:
....
$stateProvider
.state('parent', {
url: "/",
templateUrl: "parent.html"
})
.state('parent.child', {
url: "child",
templateUrl: "child.html"
})
$urlRouterProvider.otherwise("/")
})
....
2 ответа
Для того чтобы state.go работал, вы должны ввести зависимость $state в ваш контроллер
app.controller('ParentCtrl', ['$scope', '$state', function($scope, $state) {
$scope.$state = $state
}]);
app.controller('MenuCtrl', ['$scope', '$state', function($scope, $state){
$scope.goTo = function(){
$state.go('menu.kategorier');
}
}]);
и вы должны зарегистрировать состояние, которое вы хотите перейти в $stateProvider
$stateProvider
.state('menu.kategorier', {...})
и чтобы добраться до этого состояния, вы должны выйти из родительского состояния, например, "меню". вы не можете изменить состояние с "parent" на "menu.kategorier", но вы можете перейти к "parent.child" из "parent"
Я решил эту проблему, изменив настройки для вложенных представлений на основе этого примера: http://codepen.io/mhartington/pen/Bicmo
Вот мой плункер, для тех, кому интересно:
Плункер: http://plnkr.co/edit/2m5bljMntpq4P2ccLrPD?p=preview
структура app.js:
$stateProvider
.state('eventmenu', {
url: "/event",
abstract: true,
template: "<ion-nav-view name='menuContent'></ion-nav-view>"
})
.state('eventmenu.home', {
url: "/home",
views: {
'menuContent' :{
templateUrl: "home.html"
}
}
})
.state('eventmenu.home.home1', {
url: "/home1",
views: {
'inception' :{
templateUrl: "home1.html"
}
}
})