在angularjs中接收序列化的对象作为查询字符串参数

时间:2019-03-01 21:22:22

标签: javascript angularjs angularjs-1.6

我正在使用以下代码从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;

我不确定我的方法以及是否有更干净的方法,因为我必须解析第一个参数(初始值)的结果。

这里的主要问题是如何正确接收查询字符串,该字符串最初是angularJS中的对象? 这是发送对象作为查询参数的正确方法吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是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等语言和框架进行通信。