Получить сериализованный объект как параметры строки запроса в angularjs

Я отправляю вложенный объект как параметры запроса из AngularJs Controller со следующим кодом:

$scope.redirect = function () {
    const params = $httpParamSerializer({
        initval: {
            user: {
                id: 1,
                name: 'Username',
            }
        }
    })   
    $location.path('/url-to-other-controller').search(params);
})

и я должен получить эту строку запроса в моем другом контроллере как объект, я пробовал несколько способов, в конечном итоге с использованием следующего кода:

let qs = $location.search();
const initval = JSON.parse(qs.initval);
let userId = initval.user.id;

Я не уверен насчет моего метода и, если есть более чистый способ, так как я должен проанализировать результат первого параметра (initval).

Главный вопрос здесь, как правильно получить строку запроса, которые изначально являются объектами в angularJS? и это правильный способ отправки объектов в качестве параметров запроса?

1 ответ

Если вы используете JSON.parse, вам лучше использовать JSON.stringify:

$scope.redirect = function () {
    const params = {
        initval: JSON.stringify({
            user: {
                id: 1,
                name: 'Username',
            })
        }
    }
    $location.path('/url-to-other-controller').search(params);
})

Затем расшифруйте:

let qs = $location.search();
const initval = JSON.parse(qs.initval);
let userId = initval.user.id;

$httpParamSerializer а также $httpParamSerializerJQLike сервисы делают забавные вещи с массивами, которые впоследствии плохо разбираются в JavaScript.

$httpParamSerializer а также $httpParamSerializerJQLike Сервисы предназначены для общения с такими языками и средами, как PHP и Ruby on Rails.

Другие вопросы по тегам