解析 JSON 并绑定到动态创建的 HTML 表的行和列
Posted
技术标签:
【中文标题】解析 JSON 并绑定到动态创建的 HTML 表的行和列【英文标题】:Parse JSON and bind to dynamically created rows and columns of HTML table 【发布时间】:2018-12-28 23:11:06 【问题描述】:在这里使用 angularjs:
我有一个 html 表,其列和可编辑行是动态创建的。用户可以将此详细信息保存在数据库中。
动态创建我将列名称保存为逗号分隔的名称。这些行也保存为每行的逗号分隔值。
例如db表如下:
Id col row comment createdby
1 col1, col2, col3, col4 1,2,3,4 test1 abc
2 col1, col2, col3, col4 5,6,7,8 test2 abc
在详细视图用户期间,我想重绘表格,从数据库中获取 col 和 row 值,如下所示
上表在 UI 上如下所示
col1 col2 col3 col4
1 2 3 4
5 6 7 8
表格代码如下:
function createTable()
return
columns: [],
rows: []
var table =
columns: [],
rows: []
;
$scope.tables = [table];
$scope.tables.push(createTable());
$scope.targetTable = $scope.tables[0];
从我的 api 返回的 Json 是这样的:
colName: "col1, col2, col3, col4
rowValues: "1,2,3,4"
colName: "col1, col2, col3, col4
rowValues: "5,6,7,8"
//and so on we can have more rows
对于列我这样做。
var colArray = json.colName.split(',');
for (var i = 0; i < colArray.length; i++)
$scope.targetTable.columns.push(
colName: colJson.col.split(',')[i],
//where colName is the ng-model in the html for table header
);
上面的代码工作正常,我可以看到我的 HTML 表是用所有这些列创建的
我很难找到将我的行绑定到此表的解决方案,因为它们是动态创建的并且没有行数限制。
对于添加行,我们会这样做
$scope.targetTable.rows.push();
所以在我的情况下,我如何循环遍历我的 Json 并将每个值推送到行。 例如,这样的事情会根据我的 json 创建前两行:
$scope.targetTable.rows.push(
"0":"1", "1":"2", "2":"3","3":"4"
);
$scope.targetTable.rows.push(
"0":"5", "1":"6", "2":"7","3":"8"
);
【问题讨论】:
【参考方案1】:我不完全确定此解决方案是否会回答您的问题,如果没有,我会尝试根据需要进行更新。
对于单行,我相信这种方法会按预期工作:
var rowArray = json.rowValues.split(',');
for (var i = 0; i < rowArray.length; i++)
var rowObject = ;
json.rowValues.split(',').forEach((elem, index) =>
rowObject[index] = elem;
)
$scope.targetTable.rows.push(rowObject);
这将从json.rowValues
中取出一行,其格式类似于11,22,33,44
,并将其转换为与您的行格式匹配的对象(0: "11", 1: "22", 2: "33", 3: "44"
)。然后将该对象推送到 $scope 中的表中。
【讨论】:
以上内容仅适用于一行。如果您在上面看到我的帖子,这里再次存在的问题是我有 json 数组。我需要解析那个 json 行数组,然后让你的解决方案适应它。我期望的是上述函数被调用两次,创建 2 行。一个用于 0: "1", 1: "2", 2: "3", 3: "4",第二个用于 0: "5", 1: "6", 2: "7", 3:“8” 啊,我没有意识到 JSON 是在数组中返回的,因为它不像数组那样格式化。我已经用应该适用的代码更新了我的答案。【参考方案2】:你可以试试这样的。
// New data that you will push
newJson = ;
// The data you pulled from server
oldJson =
colName: "col1, col2, col3, col4",
rowValues: "1,2,3,4",
;
oldJson.rowValues.split(',').map((element, index) =>
newJson[index] = element;
);
// New Json... Expected Output: 0: 1, 1: 2, 2: 3, 3: 4
$scope.targetTable.rows.push(newJson);
【讨论】:
正如我在上一条评论中发布的那样。这适用于单行。我有 json 行数组。如何遍历 json 数组,然后使用您的上述逻辑 您需要将从您的 api 获取的 JSON 保存为一个数组。示例: "Rows": [ "colName": "col1, col2, col3, col4", "rowValues": "1,2,3,4" , "colName": "col1, col2, col3, col4", "rowValues": "5,6,7,8" ]
然后您应该能够使用前面提到的函数遍历 Rows 的每个元素。【参考方案3】:
我会推荐使用 jQuery。您可以组合表结构并附加到表体,例如,
"yourdata": colName: "col1, col2, col3, col4 rowValues: "1,2,3,4" colName: "col1, col2, col3, col4 rowValues: "5,6,7,8"
$.getJSON("your-restapi/ or x.php" + function (data)
$.each(data.yourdata, function()
$.each(this, function(k, v)
$('<tr>' +
'<td>' + v.rowValues + '</td>' +
'<td>' + v.colName + '</td>' +
</tr>').appendTo("table-body");
)
);
);
【讨论】:
这个问题是关于 AngularJs 的。不建议将 JQuery 与 AngularJs 一起使用,建议使用 JQuery 而不是 AngularJs 的答案确实错过了问题的重点。以上是关于解析 JSON 并绑定到动态创建的 HTML 表的行和列的主要内容,如果未能解决你的问题,请参考以下文章
如果我在 jquery 绑定中更改,为啥 html 表的顺序不会改变?
如何解析 JSON 模式文件并使用许多列约束动态创建新的 Python 类?