プロパティバインドを利用して、2つのテーブルの列幅をリンクすることができます(this plunker)。私の例では、トップテーブルのカラム幅は一定の間隔で増加し、ボトムテーブルのカラム幅はプロパティバインディングに従って続きます。
<table>
<tr #table1Row>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
<tr>
</table>
<table>
<tr>
<td [style.width.px]="getColWidth(table1Row, 0)">Column 1</td>
<td [style.width.px]="getColWidth(table1Row, 1)">Column 2</td>
<td [style.width.px]="getColWidth(table1Row, 2)">Column 3</td>
<tr>
</table>
// Get the column width from Table 1
public getColWidth(row: HTMLTableRowElement, index: number): number {
return row.cells[index].offsetWidth;
}
更新:あなたは(角度例外を回避するために)変更を非同期に行うために必要がある場合は、次のコードを試すことができます
(this plunkerに実装)。 setTimeout
を呼び出して、現在の実行サイクルの後に新しい幅を取得します。
private colWidths: Array<number> = [ 0, 0, 0 ];
public getColWidth(row: HTMLTableRowElement, index: number): number {
let width = row.cells[index].offsetWidth;
if (Math.abs(this.colWidths[index] - width) > 0.001) {
setTimeout(() => {
this.colWidths[index] = width;
}, 0);
}
return this.colWidths[index];
}
この質問を見て、受け入れ答えhttps://stackoverflow.com/questions/47729202/change-element-width-dynamically-のコメントを持って、私には正確に重複していないようですが、オンアングル-5 –
ありがとうございます。私はそれを読んで、受け入れられた答えと同じコードを試しました。しかし、それは私の問題を解決しません。 ウィンドウのサイズを変更するとすぐに、テーブルヘッダーに値が設定されるためです。 私はこのようなものを実装しようとしています: [link](https://jsfiddle.net/pu4q1931/3/)しかし、それがJSを持っているので、フィディドにはその問題がないことがわかります。私は角度を変えて同じようにする方法を知らないので、プログラムが実行されるとすぐに、それらの幅が必要になります。 –
その場合、問題を見つけようとしましょう。だから、ページ内のコードを開くとき、幅は正しく計算されていますが、適用しないか、サイズを変更するまで利用できませんか? –