クリックした行のオブジェクトに関する情報を表示する目的で、表に行を挿入しようとしています。データはサービスからフェッチされます。私は別のアプローチを試みました。this oneは私に最も近いものです。残念ながら、renderer2.setRootElement()メソッドはクリックされた行の内容を削除します。第二に、これはAngularで推奨されていないように働くようです。行をテーブルに動的に挿入する正しい方法は、角度でですか?
テンプレート:
<tbody #tbody>
<tr class="row" *ngFor="let ticket of tickets; let i=index" (click)="createInfoBox($event, i, ticket)" id="row_{{i}}">
<td class="col-md-1" id="ticket_state"> {{ ticket["AsstDoc.ProcState"] }}</td>
<td class="col-md-2" id="ticket_date">{{ ticket["AsstDoc.DocDate"] }}</td>
<td class="col-md-4" id="ticket_office">{{ ticket["AsstDoc.CustName"] }} {{ ticket["AsstDoc.DeliveryAddrNo"] || ticket["Addr.Line1"] }}</td>
<td class="col-md-4" id="ticket_shortdescr">{{ ticket["AsstDoc.IntermedText"] || ticket["AsstDocItem.IntermedText"] || ticket.json }}</td>
</tr>
</tbody>
のonClick:
createInfoBox($event, index, ticket) {
this.renderer.selectRootElement(`#row_${index}`).insertAdjacentHTML('afterend', '<tr><td colspan="5">inserted content</td></tr>');
}
私はまた、私が取得することができ、そこからすべての行を検索し、結果のQueryListを作成する必要がありますディレクティブで、another approachを試してみましたクリックされた行にインデックスを付け、兄弟を作成します。クエリーリストは空になる。
@Directive({
selector: 'tr'
})
export class Rows {
constructor(public viewContainerRef: ViewContainerRef) { }
}
@ViewChildren(Rows) children: QueryList<Rows>;
ngAfterViewInit() {
console.log(this.children)
this.children.changes.subscribe((comps: QueryList <Rows>) =>
{
console.log("comps",comps);
});
}
今日私が見てきたすべての例は、わたしを混乱させました。私の場合、正しいアプローチは何ですか?
あなたは、追加の情報を新しい行unrender /レンダリングするブール値+ ngIfを使用ngのテンプレートであなたのTRをラップすることができ
私はng-bootstrapでモーダルウィンドウを配置してしまいました。これは上手く見えて、上で達成しようとしていたものよりも良い感じでした – javahaxxor