首页 > 解决方案 > 在angularjs中接收序列化对象作为查询字符串参数

问题描述

我使用以下代码从 AngularJs 控制器发送嵌套对象作为查询参数:

$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 中的对象?这是将对象作为查询参数发送的正确方法吗?

标签: javascriptangularjsangularjs-1.6

解决方案


如果你正在使用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 中不能很好地解析。

和服务用于与 PHP 和 Ruby on Rails 等语言和框架进行通信$httpParamSerializer$httpParamSerializerJQLike


推荐阅读