Получение параметра маршрута для разрешения
Меня убивает моя неспособность использовать Angular -UI UI-Router. У меня есть состояние, определяемое следующим образом:
$stateProvider
.state('member', {
url: '/member/:membersId',
templateUrl: 'templates/member.html',
resolve : {
// From examples for testing
simpleObj: function(){
return {value: 'simple!'};
},
memberDetails : function(FamilyService,$state) {
return FamilyService.getMember($state.current.params.membersId);
}
},
controller: 'MemberController'
});
Поскольку документы говорят, что $stateParams недоступны, я использую $state.current.params. Все должно быть в порядке. Вместо этого я теряю воздух. Я не могу получить доступ к membersId
, чтобы спасти свою жизнь.
Чтобы проверить мою службу и убедиться, что это не проблема, я жестко закодирован в memberId, и контроллер получает результат memberDetails
, а также результат simpleObj
. Итак, Service and Controller и отлично работают.
Пример этого hardcoded:
$stateProvider
.state('member', {
url: '/member/:membersId',
templateUrl: 'templates/member.html',
resolve : {
// From examples for testing
simpleObj: function(){
return {value: 'simple!'};
},
memberDetails : function(FamilyService,$state) {
return FamilyService.getMember('52d1ebb1de46c3f103000002');
}
},
controller: 'MemberController'
});
Даже если документы говорят, что вы не можете использовать $stateParams в решении, я все равно пробовал. Это тоже не работает.
return FamilyService.getMember($stateParams.membersId);
Как в мире я могу получить параметр membersId
для передачи в FamilyService для решения?
У меня не осталось много волос, чтобы вытащить; поэтому, кто-то спаси меня, пожалуйста.
Ответы
Ответ 1
Я, наконец, понял это. Это было довольно просто и в документах. Несмотря на чтение несколько раз, я упускал из виду это каждый раз. Мне нужно было ввести $stateParams в решение:
$stateProvider
.state('member', {
url: '/member/:membersId',
templateUrl: 'templates/member.html',
resolve : {
simpleObj: function(){
return {value: 'simple!'};
},
memberDetails : function(FamilyService,$stateParams) {
return FamilyService.getMember($stateParams.membersId);
}
},
controller: 'MemberController'
});
Я до сих пор не понимаю, почему в документации сказано, что это невозможно.
Два важных $stateParams Gotchas
Объект $stateParams заполняется только после активации состояния и все зависимости разрешены. Это означает, что у вас не будет доступа к это в состоянии решения функций. Вместо этого используйте $state.current.params. $stateProvider.state('contacts.detail', {resolve: { someResolve: function ($ state) { // * Мы не можем использовать $stateParams здесь, служба не готова// // Вместо этого используйте $state.current.params *// return $state.current.params.contactId + "!" }; },//...})