Angular2表行作为组件
我正在试验angular2 2.0.0-beta.0
我有一个表,线的内容是由angular2这样生成的:
<table> <tr *ngFor="#line of data"> .... content .... </tr> </table>
现在这个工作,我想封装内容到一个组件“表格线”。
<table> <table-line *ngFor="#line of data" [data]="line"> </table-line> </table>
在组件中,模板有<tr> <td>内容。
但现在桌子不再工作了。 这意味着,内容不再显示在列中。 在浏览器中,检查员告诉我,DOM元素看起来像这样:
<table> <table-line ...> <tbody> <tr> ....
我怎样才能做这个工作?
使用现有表格元素作为select器
table元素不允许<table-line>
元素作为子元素,而浏览器只是在find它们时将其删除。 你可以把它包装在一个组件中,然后使用允许的<tr>
标签。 只需使用"tr"
作为select器。
使用<template>
应该允许<template>
,但在所有的浏览器中都不起作用。 Angular2实际上从不向DOM添加一个<template>
元素,而只是在内部处理它们,所以这个也可以在Angular2的所有浏览器中使用。
属性select器
另一种方法是使用属性select器
@Component({ selector: '[my-tr]', ... })
被用来像
<tr my-tr>
以下是使用具有属性select器的组件的示例:
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中的模板会涉及更多,但是你明白了。
旧的(beta.0) 闯入者
我发现这个例子非常有用,但是它在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(); } }