javascript - 在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 中的对象?这是将对象作为查询参数发送的正确方法吗?
解决方案
如果你正在使用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
推荐阅读
- javascript - 单击带有 CSS 的 + 图标后自动折叠 Accordian 样式选项卡
- excel - 如何通过考虑 Excel 中的重叠时段来计算总小时数/天
- node.js - Sequelize-Try 块不会捕获 model.create() 错误
- angular - Angular 模板驱动的表单自定义验证
- nginx - 在 Nginx 服务器中通过 Internet(不是 localhost)访问 GraphDB Workbench
- node.js - 如何在 netlify 中为特定路由设置自定义域
- google-apps-script - 有没有办法在 Google Sheet 中获取单元格的格式并将其移动到 Google Doc 以进行报告?
- bash - 循环 n 行 - 创建 csv
- python - 无法理解 For 循环在 Python 中是如何工作的
- flutter - “无法解决包”每次在我自己的包中安装新包