Не удалось отправить данные с помощью $state.go

У меня есть этот код в моем угловом приложении. Итак, как говорит код, загружается несколько представлений, и я хочу передать один параметр.

.state('root.moduleListing', {
    params: ['registerData'],
    views: {
        "main_container": {
            controller: 'ModuleListingController as model',
            templateUrl: 'misc/module-listing/module-listing.tpl.html',
            resolve: {
                registerData: ['$stateParams', function($stateParams) {
                    return $stateParams.registerData;
                }]
            }
        },
        "components_header_header": {
            controller: 'HeaderController as model',
            templateUrl: 'components/header/post-login.tpl.html',
        },
        "components_footer_footer": {
            controller: 'FooterController as model',
            templateUrl: 'components/footer/footer.tpl.html',
        }
    }
}

& я вызываю это, используя

$state.go('root.moduleListing', {'registerdata': response});

и в контроллере я просто пытаюсь войти в консоль.

module.controller('ModuleListingController', function ($scope, $state, registerData) {
    var model = this;
    console.log("registerData : " + registerData);
}

Теперь приложение даже не запускается, т.е. я получаю сообщение об ошибке в консоли:

failed to instantiate module amcatUI due to:
TypeError: id.match is not a function
    at getArrayMode

person Ayush    schedule 11.06.2015    source источник


Ответы (1)


Тип определенных параметров и toParams $state.go должен быть одним и тем же массивом или объектом по обе стороны перехода состояния. Просто добавьте свои параметры со значением по умолчанию в определение вашего состояния.

Вам нужно обновить код с

params: ['registerData'],

to

params: {'registerData' : null},

Вы можете обратиться к "https://stackoverflow.com/a/26204095/1132354" для подробного ответа.

Редактировать

Кроме того, вам нужно будет обновить

$state.go('root.moduleListing', {'registerdata': response});

to

$state.go('root.moduleListing', {'registerData': response});

Есть небольшая опечатка.

person Nikhil Aggarwal    schedule 11.06.2015
comment
Но в этом случае registerData в контроллере всегда будет нулевым. Я хочу, чтобы это значение было передано в $state.go - person Ayush; 11.06.2015
comment
Это будет значение, которое вы передаете. null - это просто значение по умолчанию. Когда вы говорите $state.go('root.moduleListing', {'registerdata': response}); то в контроллере вы получите ответ как registerData. Попытайся - person Nikhil Aggarwal; 11.06.2015
comment
Есть и опечатка. $state.go('root.moduleListing', {'registerdata': ответ}); г в Данные должны быть в столицах. - person Nikhil Aggarwal; 11.06.2015
comment
Не нашел информации о синтаксисе объекта (в отличие от синтаксиса массива), это действительно сложно. Потратил пару часов, пытаясь понять это, пока не погуглил ошибку id.match. Спасибо за помощь! - person Chubas; 03.08.2015