解析JSON并绑定到HTML表的动态创建的行和列

时间:2018-07-20 15:31:58

标签: javascript angularjs json

在此处使用angularjs:

我有一个HTML表,该表的列和可编辑行是动态创建的。用户可以将此详细信息保存在数据库中。

被动态创建时,我将列名称保存为逗号分隔的名称。这些行还保存为每行的逗号分隔值。

例如下面的数据库表:

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值

上面的表格在用户界面上看起来如下

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返回的杰森是这样的:

{
  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"
});

3 个答案:

答案 0 :(得分: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中的表中。

答案 1 :(得分:0)

您可以尝试类似的方法。

// 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); 

答案 2 :(得分:-1)

我建议使用jQuery。您可以组成表格结构并追加到表格主体,例如

  

“您的数据”:{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");
        })
    });
});