Angular2 строк таблицы в качестве компонента



я экспериментирую с angular2 2.0.0-beta.0



у меня есть таблица и содержимое строки генерируется angular2 таким образом:



    <table>
<tr *ngFor="#line of data">
.... content ....
</tr>
</table>


Теперь это работает, и я хочу инкапсулировать содержимое в компонент "table-line".



    <table>
<table-line *ngFor="#line of data" [data]="line">
</table-line>
</table>


и в компоненте шаблон имеет содержимое


.

но теперь это больше не работает. Это означает, что содержимое больше не отображается в Столбцах.
В браузере, инспектор показывает мне что элементы DOM выглядят так:



    <table>
<table-line ...>
<tbody>
<tr> ....


как я могу сделать эту работу?


458   4  

4 ответов:

использовать существующие элементы таблицы в качестве селектора

элемент таблицы не позволяет <table-line> элементы как дети и браузер просто удаляет их, когда он находит их. Вы можете обернуть его в компонент и по-прежнему использовать разрешенный <tr> - тег. Просто используйте "tr" в качестве селектора.

используя <template>

<template> также должно быть разрешено, но пока не работает во всех браузерах. Angular2 на самом деле никогда не добавляет <template> элемент to DOM, но только обрабатывает их внутренне, поэтому это может быть использовано во всех браузерах с Angular2, а также.

селекторы атрибутов

другой способ-использовать селекторы атрибутов

@Component({
  selector: '[my-tr]',
  ...
})

для использования как

<tr my-tr>

вот пример использования компонента с помощью селектора атрибутов:

import {Component, Input} from '@angular/core';
@Component({
  selector: '[myTr]',
  template: `<td *ngFor="let item of row">{{item}}</td>`
})
export class MyTrComponent {
  @Input('myTr') row;
}
@Component({
  selector: 'my-app',
  template: `{{title}}
  <table>
    <tr *ngFor="let line of data" [myTr]="line"></tr>
  </table>
  `
})
export class AppComponent {
  title = "Angular 2 - tr attribute selector";
  data = [ [1,2,3], [11, 12, 13] ];
}

выход:

1   2   3
11  12  13

конечно, шаблон в MyTrComponent будет более вовлечен, но вы получите идею.

старый (бета.0) plunker.

Я нашел пример очень полезным, но он не работал в сборке 2,2.3, поэтому после Большого царапания головы он снова работал с несколькими небольшими изменениями.

import {Component, Input} from '@angular/core'

@Component({
  selector: "[my-tr]",
  template: `<td *ngFor='let item of row'>{{item}}</td>`    
})
export class MyTrComponent {
  @Input("line") row:any;
}

@Component({
  selector: "my-app",
  template: `<h1>{{title}}</h1>
  <table>
    <tr  *ngFor="let line of data" my-tr [line]="line"></tr>
  </table>`

})
export class AppComponent {

  title = "Angular 2 - tr attribute selector!";
  data = [ [1,2,3], [11, 12, 13] ];
  constructor() { console.clear(); }
}

попробуй такое

@Component({
    selecctor: 'parent-selector',
    template: '<table><body><tra></tra></body></table>'
    styles: 'tra{ display:table-row; box-sizing:inherit; }'
})
export class ParentComponent{
}

@Component({
    selecctor: 'parent-selector',
    template: '<td>Name</td>Date<td></td><td>Stackoverflow</td>'
})
export class ChildComponent{}

Comments

    Ничего не найдено.