我有一个看起来像这样的Angular对象(menuItems包含更多数据,但这不是重点):
$scope.data = {
title:'Title',
place:'Somewhere'
menuItems: [{
title: "This is a Title",
name: "John"},
{
title: "Another Title",
name: "Frank"} ]
};
我使用默认值创建此$ scope.data。它们总是一样的。此数据用于使用ng-model填充html页面。以及用于显示所有menuItem的ng-repeat调用。
<input class="text form-control" ng-model="data.title"></div>
<div ng-repeat="item in data.menuItems">
<input class="text form-control" ng-model="item.name"></div>
...
</div>
然后我成功地将数据对象导出为JSON字符串,如下所示:
$scope.json = angular.toJson($scope.data, false);
哪一个产生类似于这个的JSON字符串:
{"menuItems":[{"title":"This is a title","name":"John"},{"title":"Another Title","name":"Frank"}],"title":"Title", "place":"Somewhere"}
我现在要做的是加载此JSON字符串并覆盖$ scope.data对象(以提供修改现有JSON字符串的方法)。
我像这样加载字符串:
var json = JSON.stringify("{"menuItems":[{"title":"This is a title","name":"John"},{"title":"Another Title","name":"Frank"}],"title":"Title", "place":"Somewhere"}");
$scope.data = JSON.parse(json);
但是没有数据更新,并且在ng-repeat中创建的所有div都会消失。
我无法更改JSON的结构,因为它在另一个应用程序中以这种方式使用。有没有办法实现我想要的?
感谢。
答案 0 :(得分:0)
由于您使用$scope.json = angular.toJson($scope.data, false);
,角度相反的方式是angular.fromJson($scope.json)
。
还要确保您的JSON有效。即"{"menuItems":[{"title":"This is a title","name":"John"},{"title":"Another Title","name":"Frank"}],"title":"Title", "place":"Somewhere"}")
看起来你的内部引号不会被转义,或者你不使用单引号作为外引号。
答案 1 :(得分:0)
你必须逃避引用:
var json = JSON.parse("{\"menuItems\":[{\"title\":\"This is a title\",\"name\":\"John\"},{\"title\":\"Another Title\",\"name\":\"Frank\"}],\"title\":\"Title\", \"place\":\"Somewhere\"}");
你也在串字串! JSON.stringify
期望object并返回JSON字符串。