В документации говорится, что:
Дочерние состояния DO наследуют следующее из родительских состояний:
Разрешенные зависимости через разрешение
Пользовательские свойства данных
Ничто другое не наследуется (нет контроллеров, шаблонов, URL-адресов и т.д.). Однако дети абстрактных состояний наследуют свойство url своего родителя как префикс своего собственного URL-адреса.
означает ли это, что в моем дочернем состоянии у меня будет возможность анализировать целую строку запроса?
например, если у меня есть следующая иерархия состояний:
$stateProvider
.state('contacts', {
url: 'contacts/:contactId',
abstract: true,
/* ... */
})
.state('contacts.details', {
url: '/details',
controller: 'ContactDetailsController',
/* ... */
});
Будет ли введенный $stateParams
в ContactDetailsController
иметь доступ к contactId
который предназначен для захвата в состоянии аннотации contacts
?
Найден ответ в документации:
В контроллерах $stateParams
объект $stateParams
будет содержать только те параметры, которые были зарегистрированы в этом состоянии. Таким образом, вы не увидите параметров, зарегистрированных в других штатах, включая предков.
$stateProvider.state('contacts.detail', {
url: '/contacts/:contactId',
controller: function($stateParams){
$stateParams.contactId //*** Exists! ***//
}
}).state('contacts.detail.subitem', {
url: '/item/:itemId',
controller: function($stateParams){
$stateParams.contactId //*** Watch Out! DOESN'T EXIST!! ***//
$stateParams.itemId //*** Exists! ***//
}
})
Вместо этого используйте оператор разрешения в родительском маршруте.
$stateProvider.state('contacts.detail', {
url: '/contacts/:contactId',
controller: function($stateParams){
$stateParams.contactId //*** Exists! ***//
},
resolve:{
contactId: ['$stateParams', function($stateParams){
return $stateParams.contactId;
}]
}
}).state('contacts.detail.subitem', {
url: '/item/:itemId',
controller: function($stateParams, contactId){
contactId //*** Exists! ***//
$stateParams.itemId //*** Exists! ***//
}
})
contacts/1/details
, вы можете получитьcontactId
используя $ stateParams вContactDetailsController