【问题标题】:Display data in a table by grouping them horizontally通过水平分组来显示表格中的数据
【发布时间】:2023-03-22 09:15:02
【问题描述】:

我有一些格式如下的数据:

[name:'Name1', speed:'Val1', color:'Val2']
[name:'Name2', speed:'Val4', color:'Val5']
[name:'Name3', speed:'Val6', color:'Val7']

我想在这样的表格中显示:

       |Name1|Name2|Name3|
       ______|_____|______
speed |Val1 |Val4 |Val6
color |Val2 |Val5 |Val7

我试图做的是将我的数据像这样在控制器中分组:

$scope.data = {
    speeds: [{
      ...
    },{
      ...
    },{
      ...
    }],
    colors: [{
      ...
    },{
      ...
    },{
      ...
    }],
  }; 

但我不确定在空白区域内放置什么,因为那里的所有值都代表所有名称(帐户)的 'val1' 变量的值,我的测试直到现在一直失败。

您可以将其想象为某种比较矩阵,用于查看不同帐户中同一变量的所有值。

如何在我的模型中表示数据,以便按照说明成功地将它们显示在表格中?

编辑 我的困难在于您通过逐行创建表格,所以我的 html 看起来像这样:

  <table md-data-table class="md-primary" md-progress="deferred">
    <thead>
      <tr>
        <th ng-repeat="header in headers">                
          {{header.value}}              
        </th>
      </tr>
    </thead>
    <tbody>
      <tr md-auto-select ng-repeat="field in data">                
        <td ng-repeat="var in field">{{var.value}}</td>               
      </tr>
    </tbody>
  </table>

如您所见,我对每一行都有一个循环,对每一行的每个值都有一个循环。如果我想水平显示数据,这会更容易,但我想要垂直显示数据。因此,如果我们在谈论汽车时,我们会将汽车模型作为标题,并在每一行中显示它们各自的特征(速度、颜色等)。

【问题讨论】:

  • 我不会担心更改数据以适应格式。更改格式以适应数据。请参阅此问题的公认答案:stackoverflow.com/questions/16918094/…
  • 看起来很有趣的方法,我会做一些测试。
  • 如果它没有意义或没有按预期工作,请告诉我。我现在做不到,但今天晚些时候我可以使用您在上面发布的虚拟数据编写一个快速演示!
  • 我想我明白了,这是一个不错的方法,但我仍然无法使其工作,因为数据位于范围内的不同变量中,我只能遍历其中一个。或者因为我累了,所以我把这件事弄得太复杂了。)

标签: javascript angularjs angular-material


【解决方案1】:

如果这是你的基本结构:

var cols = [{name:'Name1', val1:'Val1', val2:'Val2'},
            {name:'Name2', val1:'Val4', val2:'Val5'},
            {name:'Name3', val1:'Val6', val2:'Val7'}];

这段代码

$scope.table = cols.reduce(function(rows, col) {
    rows.headers.push({ value: col.name });
    rows.data[0].push({ value: col.speed });
    rows.data[1].push({ value: col.color });
    return rows;
}, {headers:[], data:[[], []]});

将为您提供$scope.table 的此结构:

$scope.table = {
    headers : [{
            value : "Name1"
        }, {
            value : "Name2"
        }, {
            value : "Name3"
        }
    ],
    data : [
        [{
                value : 'val1'
            }, {
                value : 'val4'
            }, {
                value : 'val6'
            }
        ],
        [{
                value : 'val2'
            }, {
                value : 'val5'
            }, {
                value : 'val17'
            }
        ]
    ]
};

  <table md-data-table class="md-primary" md-progress="deferred">
    <thead>
      <tr>
        <th ng-repeat="header in table.headers">                
          {{header.value}}              
        </th>
      </tr>
    </thead>
    <tbody>
      <tr md-auto-select ng-repeat="field in table.data">                
        <td ng-repeat="var in field">{{var.value}}</td>               
      </tr>
    </tbody>
  </table>

【讨论】:

  • 我不确定这正是我想要的,也许编辑对你有帮助。
  • 我将不得不尝试这个,但我赞成投票,因为这里的信息非常有趣,但无论如何可以说我正在遍历每一行。当没有名称时,如何告诉 Angular 移动到下一组值?
【解决方案2】:

你可以试试这个:

HTML

<table ng-app="myTable" ng-controller="myTableCtrl">
    <thead>
        <tr>
            <th ng-repeat="car in cars">{{car.name}}</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td ng-repeat="car in cars">{{car.speed}}</td>
        </tr>
        <tr>
            <td ng-repeat="car in cars">{{car.color}}</td>
        </tr>
    </tbody>

</table>

JS

angular.module("myTable",[])
.controller("myTableCtrl", function($scope) {
    $scope.cars = [
    {
        name:'Name1', 
        speed:'Val1', 
        color:'Val2'
    },
    {
        name:'Name2', 
        speed:'Val4', 
        color:'Val5'
    },
    {
        name:'Name3', 
        speed:'Val6', 
        color:'Val7'
    }
]
});

https://jsfiddle.net/ABr/ms91jezr/

【讨论】:

  • 这适用于示例中我只有两个变量的情况,但是如果您注意到我正在尝试做的事情,您会注意到我打算使用更一般的情况循环中定义的行数。这就是为什么我说这有点困难,因为如果我在循环中,那么我无法获得 .speed、.color 或其他任何名称。
  • 据我所知&lt;tr ng-repeat="field in fields"&gt; &lt;td ng-repeat="car in cars"&gt;{{car.{{field.name}}}}&lt;/td&gt; &lt;/tr&gt;
  • 从头开始,您实际上可以。 {{car[field.name]}}
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多