我是Angular2框架的新手。我试图在我的应用程序中重用单个表组件。当我试图这样做时,面临着重复在我的表行中进行任何形式的数组的困难。我如何使我的表行迭代作为输入传递到我的表组件的任何类型的数组。

当我将数组作为输入传递给表组件时,是否可以重用表组件?

以下是我的代码段。我该如何重用它?请建议我最好的方法。

app.component.html

<table>
   <thead>
     <td>name</td>
     <td>empid</td>
   </thead>
   <tbody>
     <tr *ngFor="let item of items;">
     <td>{{item.name}}</td>
     <td>{{item.empid}}</td>
     </tr>
   </tbody>
 </table>


app.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'app works!';
  items=[{name:"ravi",empid:"10215"},{name:"ravi",empid:"10215"},{name:"ravi",empid:"10215"},{name:"ravi",empid:"10215"},{name:"ravi",empid:"10215"}];
}

最佳答案

对于具有不同结构的类型的数组,您可以只创建一个管道并提取值(尽管这确实会增加大约一半的内存占用)

@Pipe({
  name: 'objectValues'
})
export class ObjectValuesPipe implements PipeTransform {
  transform(obj: any) {
    let result = [];
    for (var key in obj) {
      if (obj.hasOwnProperty(key)) {
        result.push(obj[key]);
      }
    }
    return result;
  }
}


在这里,我们只是从对象中提取值,然后将它们返回到数组中。

然后在你的桌子上,做

@Component({
  selector: 'my-table',
  template: `
  <table>
   <thead>
     <td *ngFor="let header of headers">{{ header }}</td>
   </thead>
   <tbody>
     <tr *ngFor="let item of items">
       <td *ngFor="let value of item | objectValues">
         {{ value }}
       </td>
     </tr>
   </tbody>
 </table>
  `
})
export class TableComponent {
  @Input() items
  @Input() headers
}


Plunker

也可以看看


iterate maps with ng-for讨论在ngFor中迭代地图和对象。当前不支持它,因此其他人提出了解决方法。

08-28 06:28