首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于HTML/angular2 2模板引擎的angular2动态数据可视化

基于HTML/angular2 2模板引擎的angular2动态数据可视化
EN

Stack Overflow用户
提问于 2016-12-15 21:21:53
回答 1查看 433关注 0票数 0

在前端处理数据时,经常会遇到一些挑战,要可视化用户可以理解的数据。要可视化的(动态)数据结构良好且简单(重点关注数据大小和防止重载)。

但是下面的数据结构(DATA)并不是用户的最佳视觉表示。

让我用下面的例子解释一下我还不能很好解决的问题:

让我在这里指出,我是从模板引擎(如EJS等)的角度出发的,这可能是我找不到一个简单的解决方法的主要原因--不知道.

示例:矩阵表(例如,按每周分辨率计算的一年中的时隙)

(**DATA**):数据

代码语言:javascript
复制
[
    {
        name:'Slot 1',
        slot:{
                start:3,
                end:5
             }
    },
    {
        name:'Slot 2',
        slot:{
                start:32,
                end:50
             }
    },
    {
        name:'Slot 3',
        slot:{
                start:10,
                end:26
             }
    }
]

Visualization:

应该将数据呈现为一个矩阵table,其中包含三个rows (与数据中的项一样多),每个row的分辨率为52周(cells)。而范围(start - end)应在该表中突出显示.

如前所述,我提供了其他模板引擎的透视图,因此我试图找出如何以角度编写loops左右来实现这种可视化。在其他模板引擎中,我会“解释”模板中的数据,并在两个HTML中创建loops,因为这种“重载”只是为了视觉目的。

动态生成的标记(**EJS**) - way

代码语言:javascript
复制
<table>

<%  var i, weeks=52;
    for(i=0;i<DATA.length;i+=1){
%>

<tr>
    <td><%-DATA[i].name%></td>

    <%  var j;
        for(j=1;j<=weeks;j+=1){
    %>

    <td class="<%((j>=DATA[i].slot.start && j<= DATA[i].slot.end)?'in-range':'')%>">
        <%- j %>
    <td>


    <%}%>

</tr>

<%}>

</table>

量化:

实际上,我无法在Angular 2.x中以有效的方式解决这个问题,我目前所能实现的唯一解决方案(当然不是很好)就是为这样一个table矩阵编写整个HTML

当需要对HTML进行更改时(例如,添加一个class左右),这显然会产生巨大的开销。我知道搜索&在标记中进行替换;)但是仍然需要维护大量的标记,可以生成这些标记,我认为在Angular2中也必须有这样的方法。

谢谢你帮我找到更好的方向。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-15 21:40:19

您可以使用以下代码获得所需的布局:

代码语言:javascript
复制
  <table>
    <tr *ngFor="let row of DATA">
      <td>{{ row.name }}</td>
      <td *ngFor="let week of weeks"
          [class.in-range]="row.slot.start <= week && week <= row.slot.end">
        {{ week }} 
      </td>
    </tr>
  </table>

其中使用weeks = [1, 2, 3, ..., 52]或,使用此辅助函数:

代码语言:javascript
复制
export function range(count: number, from = 0) {
  return Array.from(Array(count)).map((_, i) => i + from);
}
代码语言:javascript
复制
<td *ngFor="let week of range(52)">
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41173540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档