Ответ 1
Абстрактное состояние означает, что состояние, которое вы написали, не может быть доступно непосредственно. Абстрактные состояния все еще нуждаются в собственных интересах, чтобы их дети могли подключаться.
Он вызывается, когда мы загружаем его дочернее состояние. Вы можете использовать абстрактное состояние, чтобы определить какой-то исходный шаблон вашей страницы, предположим, что вы можете взять пример любого сайта социальных сетей, где вы хотите показать профиль пользователя и социальную страницу. Для этого вы можете иметь одно состояние abstract
, которое будет иметь url: ""
и иметь базовый макет вашей страницы. Подобно header
, content
и footer
с именем views. header
и footer
named view будет заполнен абстрактным состоянием, а затем дочерний элемент определит, что содержимое зависит от того, какой модуль отображается. /profile
отобразит userProfile.html
и /social
покажет социальную страницу пользователя social.html
.
Config
app.config(function($stateProvider){
$stateProvider.state("app":
{
url: "", //you can have the default url here..that will shown before child state url
abstract: true,
views: {
'': {
templateUrl: 'layout.html',
controller: 'mainCtrl'
},
'header': {
templateUrl: 'header.html'
},
'footer': {
templateUrl: 'footer.html'
}
},
resolve: {
getUserAuthData: function(userService){
return userService.getUserData();
}
}
})
.state("app.profile": {
'[email protected]': {
templateUrl: 'profile.html',
controller: 'profileController'
}
})
.state("app.social": {
'[email protected]': {
templateUrl: 'social.html',
controller: 'socialController'
}
})
})
Другая главная особенность abstract
заключается в том, что вы можете иметь общее разрешение на ней, предоставлять унаследованные пользовательские данные с помощью данных для использования дочерними состояниями или прослушивателем событий. Также вы можете иметь OnEnter
и OnExit
на нем, чтобы убедиться, что перед загрузкой state
и при выходе из state