Подтвердить что ты не робот

Получение параметра маршрута для разрешения

Меня убивает моя неспособность использовать 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 для решения?

У меня не осталось много волос, чтобы вытащить; поэтому, кто-то спаси меня, пожалуйста.

4b9b3361

Ответ 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 + "!"       }; },//...})