在 JSON.stringify-ing 和 JSON.parse-ing 之后恢复对象引用
Reinstate object reference after JSON.stringify-ing and JSON.parse-ing
考虑下面的一段代码。
我是我的 AngularJS 应用程序,当我用类别[0] 填充 $scope.records 的对象时,它们链接在一起,我可以在我的视图中显示类别属性:
.JS:
$scope.categories = [{
title: 'Category 1'
}, {
title: 'Category 2'
}];
$scope.records = [{title: 'New record', category: $scope.categories[0]}];
.HTML:
<select class="form-control input-sm" ng-model="record.category" ng-options="category.title for category in categories"></select>
但是:当我字符串化对象数组然后再次解析它时......
var json = JSON.stringify($scope.records);
var parsedJson = JSON.parse(json);
$scope.records = parsedJson;
。我"丢失了链接",我实际上是在创建一个副本,因此该类别不会显示为"已选择",因为:
$scope.records[0].category === $scope.categories[0]
计算结果为 false。
有什么想法可以解决这个问题吗?
在这种情况下,可能是一个非常愚蠢的问题:对不起:-)
与其将完整的类别对象映射到记录中,不如将其映射为id
或name
,如果您将其序列化为 json 并返回,它将始终有效
$scope.records = [{title: 'New record', category: $scope.categories[0].id}];
选择表达式变为
<select class="form-control input-sm" ng-model="record.category" ng-options="category.title for category.id in categories"></select>
尝试
$scope.$apply(function() {
$scope.records = parsedJson;
});
简而言之,在您的示例中,angularjs 不知道某些内容已被更改,您必须通过调用$scope.$apply
通知它。检查 http://docs.angularjs.org/api/ng.$rootScope.Scope
这个例子非常类似于我们试图将一个通过 angularjs 外部的 ajax 调用获取的变量分配给范围的情况,例如使用纯 jquery get 方法。在这种情况下,我们做了类似的事情(伪代码):
$.get("/api/something.json", function(results) {
$scope.$apply(function() {
$scope.records = results;
});
});
相关文章:
- jQuery匹配JSON对象的部分文本
- 在循环中分配json值时,值被覆盖
- 需要帮助设置json数组
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 使用JQuery解析JSON嵌套数组
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 将JSON存储和恢复到此Ionic应用程序的最有效方法
- 可以't从web服务器恢复json响应
- 如何恢复嵌套的 JSON 日期/时间
- 恢复覆盖的窗口.JSON 对象
- 在 JSON.stringify-ing 和 JSON.parse-ing 之后恢复对象引用
- 将 Blogger.com JSON 数据恢复为 html 格式
- 在Javascript中恢复JSON日期的最好方法是什么?
- 如何保存对象以供以后使用?通过JSON或其他方式发送并存储在DB中,然后恢复
- ASP.. NET MVC / JqGrid:是处理和可恢复的JSON Id
- Sencha触摸-错误- JSON恢复
- JSON.解析恢复函数有n+1个键