2017-05-08 6 views
4

テーブルを再設計していて、デフォルトのTR要素の代わりに独自のカスタムコンポーネントを導入したいと考えていました。テーブルはこれと同じように動作し、このように見えます。カスタムの角型コンポーネントがテンプレートとしてTRとしてレンダリングされない

<table> 
    <thead> 
    <tr><th *ngFor="let column of this.columns">{{column.title}}</th></tr> 
    </thead> 
    <tbody> 
    <tr *ngFor="let row of this.rows"></tr> 
    </tbody> 
</table> 

はその後、私はいつものTRを代用するために私自身のコンポーネントを導入し、次に、グリッドのマークアップを切り替えます。

<table> 
    <thead> 
    <tr><th *ngFor="let column of this.columns">{{column.title}}</th></tr> 
    </thead> 
    <tbody> 
    <row *ngFor="let row of this.rows" [value]="row" [formats]="columns"></row> 
    </tbody> 
</table> 

新しいコンポーネントのマークアップは、次のように非常に基本的です。

<td *ngFor="let format of formats"> 
    {{value[format.id]}} 
</td> 

これは機能します。私。 でもの値が生成されています(私はdevtoolsの確認を確認できます)がテーブルの最初の列に表示されます。したがって、データバインディングが機能します。マークアップの生成は動作します。失敗する唯一のことは、愚かなブラウザは行が(TRのように)想定されることを得られないということです。単一のTDとしてレンダリングできると考えています。

私は愚かなブラウザに私が言ったことではなく、私が何を意味するのか教えてください。

答えて

4

rowtrと認識しないため、tableが正しく表示されないためです。あなたのテーブルで

@Component({ 
    selector: '[row]', 
    template: ` 
    <td *ngFor="let format of formats"> 
     {{value[format.id]}} 
    </td> 
    ` 
}) 

そして:

は、このようなあなたのコンポーネントを使用してみてください

<tr row></tr> 

この方法で、みんなtrとしてtrを認識するだけで、あなたが望むようにそれが動作します:rowコンポーネントを使用しています。

(私はカスタムメニュー要素と同じ問題を抱えていた。それはli要素を認識しなかった。<li my-element>を使用して問題を修正しました。)

+0

_ _「これは、属性ディレクティブと呼ばれて」いいえ、そうではありません。セレクタが変更されただけなので、なぜコンポーネントを別のものと呼びますか? – zeroflagL

+0

@zeroflagL実際、あなたのコメントを読んだあと、コンポーネントの呼び出し方法を変更したことに気付きました。実際の**属性指示**を作成した '@ Directive'は使用しませんでした。彼のコンポーネントは、それがディレクティブのように呼び出されても '@ Component'を使用するため、コンポーネントです。それを指摘してくれてありがとう。 – SrAxi

+0

@zeroflagLこの提案に欠陥があると言っていますか?現時点での私の混乱のレベルに基づいて、私は本当に敢えて言いません。私はそれがうまくいったので、私は答えを受け入れました。しかし、私は間違ったパターンを覚えていることを恐れています(また、将来のユーザーが頼りにして誤っている可能性があるためにトレースを残してしまいます)。どう思いますか? –

関連する問題