私は角2-rc3を使用していますが、Component
を持っていますので、ちょっと違った方法でトランケーションを適用したいと思います。ここに私のコンポーネントです:コンポーネントはインラインテンプレートで転写されます
import { Component, Input } from '@angular/core';
@Component({
selector: 'my-list',
template: `<ul>
<li *ngFor="let item of data">
-- insert template here --
<ng-content></ng-content>
</li>
</ul>`
})
export class MyListComponent {
@Input() data: any[];
}
そして、私はこのようにそれを使用します。
<my-list [data]="cars">
<div>{{item.make | uppercase}}</div>
</my-list>
あなたが見ることができるように、私は私のコンポーネントで使用されるインラインテンプレートを定義しようとしています。今これはひどく間違っています。まず、データバインディングの例外はcan't read property 'make' of undefined
です。それはitem.make
を私の周囲のコンポーネントから読み取ろうとしたもので、MyListComponent
ではありません。私は一時的に今のためにこれを無効にしても、しかし:
<my-list [data]="cars">
<div>{item.make | uppercase}</div>
</my-list>
そして、第二の問題が表示されます。
-- insert template here --
-- insert template here --
-- insert template here --
-- insert template here --
{item.make | uppercase}
ので角度が実際に*ngFor
内で使用するためのテンプレートをコピーしません、それだけの要素を結合し最後の項目に関連付けられます。
これはどのように機能するのですか?
私はAngularJSと同じ問題を抱えていました。ここではpetebacondarwin posted a solution to manipulate the DOM through compileですが、それは素晴らしいものでした。私は角度2でこのオプションを持っています。ElementRef
を私のコンポーネントに注入しますが、! 1つの大きな違いは、AngularJSのcompile
がデータ結合前に外れたことです。つまり、テンプレートに{{item.make}}
を使用しても問題はありませんでした。角2では、手の前には{{item}}
が解析されているので、これは無駄なようです。だから、これを進めるにはどうすればよいでしょうか?少し違う表記[[item]]
を使用し、文字列全体を置換する文字列は、最もエレガントな方法と思われません。
ありがとうございます!
//編集:問題を再現するPlnkrがあります。 *ngFor
内部
Plunkerを使って、どこにどのように使いたいかを再現できることは素晴らしいことです。たとえば、ここに「テンプレートを挿入する」が何を意味するのかを把握することは難しいです。 –
追加されました!ありがとう。 –
@JPtenBerge私は同様の問題を抱えていて、[解決策を見つけました](http://stackoverflow.com/questions/38174837/how-to-create-a-component-with-a-dynamic-template-component-transclude- with-in) – Ross