Ответ 1
При использовании ui.router вы должны думать о состояниях, а не о маршрутах. Поэтому вместо $routeProvider
вы вместо этого вводите $stateProvider
, планируете различные состояния и работаете оттуда. Итак, из вашего примера выше, мы преобразуем его в:
app.config(function ($stateProvider,$urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('login', {
url:'/login',
templateUrl: 'app/views/login.html',
controller: 'LoginCtrl'
})
.state('contact', {
url:'/contact',
templateUrl: 'app/views/contact.html',
controller: 'ContactCtrl'
})
.state('notification', {
url:'/notification',
templateUrl: 'app/views/notification.html',
controller: 'NotificationCtrl'
});
}
Существует много способов добавления "подвид" к uirouter, один метод - путем добавления дочернего состояния.
$stateProvider
.state('login', {
url:'/login',
templateUrl: 'app/views/login.html',
controller: 'LoginCtrl'
})
.state('login.error', {
url:'/login',
templateUrl: 'app/views/login-error-subview.html',
controller: 'LoginErrorCtrl'
})
Также как $stateProvider
не предоставляет обработчик состояния по умолчанию, вам также нужно ввести в $urlRouterProvider
. Это поставщик, который также поставляется с ui-router, на который возложена ответственность за просмотр $location
для изменений.
Вещь с ui-router заключается в том, что вы не увидите огромной разницы по сравнению с встроенным провайдером маршрутов и простотой использования, которую она приносит, пока вы не начнете использовать под-состояния и штабелированные состояния.
В приведенном выше примере ui.router не знает, какой templte использовать u-view и, таким образом, оставляет его пустым. Вы можете создать шаблон и таким образом:
...
.state('notification', {
url: '/notification',
views: {
'':{
templateUrl: 'app/views/notification-main.html',
controller: ''
}
'notification-view': {
templateUrl: 'app/views/notification.html',
controller: 'NotificationCtrl'
}
}
...
Но из того, что я получаю, вы хотите, чтобы login и контакт имел в нем уведомление. Поэтому в идеале вы создадите дочернее состояние уведомление для каждого, так как сейчас есть способ объявить шаблон или несколько родителей для дочернего состояния. Надеюсь, когда выйдет v1.0, уже будет поддержка этого прецедента.
Ниже приведена ссылка из документов, которые помогут вам быстро:
https://github.com/angular-ui/ui-router/wiki/URL-Routing
https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views