Я хочу создать почтовое клиентское приложение, в котором пользователь сначала увидит панель входа в систему, а затем будет перенаправлен на основное представление с несколькими другими видами внутри. Как полученные электронные письма, удаленные, спам-экт. Для этого я использовал ui-router и вложенные представления, а мой код конфигурации выглядел следующим образом:
app.config(function($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/login');
$stateProvider
.state('/',{
url: '/login',
templateUrl: 'views/login.html',
controller: 'loginCTRL'
})
.state('main',{
url: '/main',
templateUrl: 'views/mainView.html',
controller: 'MailCtrl'
}),
.state('main.received', {
url: '/received',
templateUrl: '/views/received.html' ,
controller: 'receivedCTRL'
})
})
.state('main.spam', {
url: '/spam',
templateUrl: '/views/spam.html',
controller: 'spamCTRL'
})
.state('main.removed', {
url: '/removed',
templateUrl: '/views/removed.html',
controller: 'removedCTRL'
})
.state('main.message', {
url: '/message',
templateUrl: '/views/FullMessage.html',
controller: 'MailCtrl'
}) });
Но вместо отображения всех вложенных представлений на моей панели электронной почты он отправляет меня обратно в режим входа в систему. Все пути верны.
Убедитесь, что шаблон, используемый в main
состоянии, имеет безымянный ui-view
. Что-то вроде:
<div ui-view></div>
В родительских состояниях требуется не менее 1 ui-view для его заполнения (если вы не используете какую-либо действительно расширенную конфигурацию)
ОБНОВИТЬ
При использовании ui-router используйте $state
вместо $location
. $state
- это сервис, предназначенный для навигации между государствами и может использоваться с именами государств.
В вашем loginCtrl
попробуйте изменить $location.path
для $state.go('main')
(не забудьте включить зависимость для $state
в параметрах контроллера)
Кроме того, при создании ссылок в HTML используйте ui-sref="state_name"
как предложил Джадсон Террелл.
Обычно, когда ui-router перенаправляет URL-адрес по умолчанию, потому что он не смог найти состояние для предоставленного URL-адреса. При таком подходе вы можете убедиться, что URL-адрес, предоставленный браузеру, такой же, как тот, который настроен для ваших состояний.
Если это не работает, попробуйте также комментировать $urlRouterProvider.otherwise
чтобы избежать перенаправления.
/
является допустимым именем штата ... Я бы изменил его на что-то другое на всякий случай
Может, в этом и проблема? Вам это нужно?
$stateProvider
.state("otherwise", { url : '/login'})
также я предполагаю, что вы так связываетесь..
<a ui-sref="mystate">Go To My State</a>
views/mainView.html
ли вы предоставить содержаниеviews/mainView.html
?