Angular2:以行/列方式显示项目

时间:2017-03-23 15:17:17

标签: css angular angularjs-directive angular2-template

我有一个具有以下格式的数组,其中第一个参数是要显示的文本,第二个是列号,第三个是行号。我想根据列和行的位置显示这些项目。

[[ "a",  "0", "0"],
["b", "0", "1"],
["c", "0", "2"],
["d", "1", "0"],
["e", "1", "1"],
["f", "2", "0"],
["g", "2", "1"]

期望的输出:

a d f
b e g
c

2 个答案:

答案 0 :(得分:1)

你可以这样做: Plunker

组件:

  value : string;
  rows : any[];
  cols : any[];
  arr : any = [[ "a",  "0", "0"],
    ["b", "0", "1"],
    ["c", "0", "2"],
    ["d", "1", "0"],
    ["e", "1", "1"],
    ["f", "2", "0"],
    ["g", "2", "1"]];

  constructor() { 
    this.rows = Array(3).fill();
    this.cols = Array(3).fill();
  }

  activeElement(r,c) : string{
    for(let elem of this.arr){
      if(parseInt(elem[1]) === c && parseInt(elem[2]) === r){
        console.log(true);
        return elem[0];
      }
    }
    return ""
  }

模板:

<div *ngFor="let row of rows; let rowId = index">
 <span *ngFor="let col of cols; let colId = index">
   {{activeElement(rowId,colId)}}
 </span>
</div>

答案 1 :(得分:0)

您需要查看弹性框Flex Box

基本上,您将需要使用包装的基于列的布局。

此外,还有一个用于Angular的声明帮助的组件库:FlexLayout

使用FlexLayout,您可以执行以下操作:

@Component({
  template: `
    <div fxFlexLayout="column" fxLayoutWrap>
      <div fxFlex="30%" *ngFor="let item of items | async">{{ item }}</div>
    </div>
  `
})
export class ItemListComponent implements OnInit {

    items: Observable<Item[]>

    constructor(...) {}

    ngOnInit() {
       this.items = this.service.getItems()
         .map(x => x.[0])
    }

}