temp

 avatar
unknown
typescript
4 years ago
1.7 kB
6
Indexable
import { Component } from "@angular/core";

interface IDataItem {
  name: string;
  id: number;
}

@Component({
  selector: "my-app",
  /* html */

  // в отдельном файле
  template: `
    <table>
      <tr>
        <th>id</th>
        <th>name</th>
        <th>status</th>
      </tr>
      <tr
        *ngFor="let item of data"
        [class.selected]="item === selected"
        (click)="onSelect(item)"
      >
        <td>{{ item.id }}</td>
        <td>{{ item.name }}</td>
        <td>{{ getStatus(item) }}</td>
      </tr>
    </table>
  `,
  // в отдельном файле
  styles: [
    `
      table {
        border: 1px solid black;
      }

      table tr:first-child {
        background-color: #e2e2e2;
      }

      table tr.selected td {
        background: yellow;
      }

      table td {
        padding: 10px 20px;
      }
    `,
  ],
})
export class AppComponent {
  public selected: IDataItem;
  // приходит с бекенда
  public data: IDataItem[] = [
    {
      name: "name 1",
      id: 1,
    },
    {
      name: "name 2",
      id: 2,
    },
    {
      name: "name 3",
      id: 3,
    },
    {
      name: "name 4",
      id: 4,
    },
  ];

  public onSelect(item: IDataItem): void {
    this.selected = item;
  }

  public getStatus(item: IDataItem): string {
    const status = getStatus(item.id);
    return `${item.id} ${item.name} ${status}`;
  }
}

// не трогать имплементация 3d party библиотеки
function getStatus(id: number): string {
  function fib(n) {
    return n <= 1 ? n : fib(n - 1) + fib(n - 2);
  }
  return `status ${fib(10 + id)}`;
}
Editor is loading...