如何将json推入嵌套数组 - angularjs

时间:2015-01-19 08:47:10

标签: c# asp.net angularjs

我可以在硬编码数据时使其工作,如下所示:

$scope.ChatHistory=[];
$scope.ChatHistory.push({
        IsCustomer: false,
        UserText: "Please enter the category you are looking for.",
        OptionItems: [
            { OptionId: "", SortOrder: "1", OptionName: "Complaint" },
            { OptionId: "", SortOrder: "2", OptionName: "Registration" },
            { OptionId: "", SortOrder: "3", OptionName: "Enquiry" }
        ]
    });

HTML:

<ul>
  <li ng-repeat="objHistory in ChatHistory track by $index"
      ng-class="{'user': objHistory.IsCustomer, 'desk': !IsCustomer}">
      {{ objHistory.UserText }}
      <p ng-repeat="opt in objHistory.OptionItems track by $index">
         {{ opt.SortOrder }} {{ opt.OptionName }}
      </p>
  </li>
</ul>

现在,我从DB获取数据:

$scope.GetData = function (categoryId) {
        DataFactory.GetData(categoryId)
        .success(function (data,status) {            
            $scope.ChatHistory.push(data);
            console.log(data);
        })
        .error(function (data, status) {                        
        });
    }

// console log

 "{\"IsCustomer\":false,
  \"UserText\":\"\",
  \"OptionItems\":[
     {\"OptionId\":1,\"SortOrder\":1,\"OptionName\":\"Complaint\"},
     {\"OptionId\":2,\"SortOrder\":2,\"OptionName\":\"Request\"},
     {\"OptionId\":3,\"SortOrder\":3,\"OptionName\":\"Enquiry\"}
   ]
 }"

如何推送此数据&#39;进入&#39; ChatHistory&#39;阵列现在。 $ scope.ChatHistory.push(data)不起作用。没有错误,但html中没有显示任何内容。

2 个答案:

答案 0 :(得分:2)

您的JSON对象似乎是以字符串形式返回的。在从数据库中提取数据的代码中,您首先返回了一个数组吗?如果是这样,您可以运行该数组并手动将每个字段存储到您自己创建的JSON对象中,从而确保您有效地发送和接收有效的JSON。

如果这不起作用(这可能意味着Angular在传输期间将JSON转换为字符串),那么您可以简单地在变量数据上使用JSON.parse(控制台日志的输出,这是字符串)。但是,您必须摆脱换行符:

JSON.parse("{\"IsCustomer\":false, \"UserText\":\"\", \"OptionItems\":[ {\"OptionId\":1,\"SortOrder\":1,\"OptionName\":\"Complaint\"}, {\"OptionId\":2,\"SortOrder\":2,\"OptionName\":\"Request\"}, {\"OptionId\":3,\"SortOrder\":3,\"OptionName\":\"Enquiry\"}]}")

它应该为您提供JSON对象。

答案 1 :(得分:0)

我不认为你必须将数据对象推送到ChatHistory。试着分配如下:

$scope.ChatHistory = data; // this is the data that is returned from server call.