質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

4561閲覧

Angular8で動的にtableのセルに背景色を指定する方法がわからない

jspracticeuser

総合スコア0

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/01/30 16:56

前提・実現したいこと

Angular8を使って、動的なデータに紐づくテーブルを作ろうとしています。
動的なデータは「no、name、カラコード(#000000~で範囲は決まっていない)」です。
上記データを使ってテーブルを表示する際、各行の3つ目のセルだけ、
そのカラコードに合わせて背景色を変えたいと思っています。

例)取得したデータが「1, test, #000000」なら、
「1, test, (背景色が#000000)#000000」となるようにしたい。

発生している問題・エラーメッセージ

styleバインディングやpropertyバインディングなど調べているのですが、
なかなか動的にセルの属性だけを指定することができていません。

該当のソースコード


- HTML

<table mat-table [dataSource]="dataSource" matSort class="mat-elevation-z8"> <!-- no Column --> <ng-container matColumnDef="no"> <th mat-header-cell *matHeaderCellDef mat-sort-header> No. </th> <td mat-cell *matCellDef="let element"> {{element.no}} </td> </ng-container> <!-- Name Column --> <ng-container matColumnDef="name"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Name </th> <td mat-cell *matCellDef="let element"> {{element.name}} </td> </ng-container> <!-- course Column --> <ng-container matColumnDef="course"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Course </th> <!-- <td mat-cell *matCellDef="let element" bgcolor="6699cc"> {{element.course}} </td> --> <!-- <td id="tdname" name="tdname" [(ngModel)]="name" mat-cell *matCellDef="let element" bgcolor="6699cc"> {{element.course}} </td> --> <td mat-cell *matCellDef="let element" [attr.bgcolor]="bgcolor"> {{element.course}} </td> </ng-container> <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr> </table>

- typescript
import {AfterViewInit, Component, ViewChild} from '@angular/core';
import {MatSort} from '@angular/material/sort';
import {MatTableDataSource} from '@angular/material/table';

export interface Reservation {
no: number;
name: string;
course: string;
}

const SAMPLE_DATA: Reservation[] = [
{no: 0, name: "AA", course: "#000000"},
{no: 1, name: "BB", course: "#111111"},
{no: 2, name: "CC", course: "#22AABB"},
];

@Component({
selector: 'aa-root',
templateUrl: './page-c.component.html',
styleUrls: ['page-c.component.css']
})

export class PageCComponent {

displayedColumns: string[] = ['no', 'name', 'course'];
dataSource;
bgcolor;

@ViewChild(MatSort, {static: true}) sort: MatSort;

ngOnInit() {
this.bgcolor = "22AABB";
this.dataSource = new MatTableDataSource(SAMPLE_DATA);
}
}


- css
table {
width: 100%;
}

th.mat-sort-header-sorted {
color: black;
}


試したこと

angular-materialのmat-tableでdata-sourceのデータを指定して、
attr.bgcolorで色を変更すると、その列全体の色が変わる所まではできています。
ただ、各行のセルごとに色を変更するのができずの状態です。

補足情報(FW/ツールのバージョンなど)

Angular CLI: 8.0.6
Node: 14.15.4
OS: win32 x64
Angular: 8.0.3
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package Version

@angular-devkit/architect 0.800.6
@angular-devkit/build-angular 0.800.6
@angular-devkit/build-optimizer 0.800.6
@angular-devkit/build-webpack 0.800.6
@angular-devkit/core 8.0.6
@angular-devkit/schematics 8.0.6
@angular/cdk 8.2.3
@angular/cli 8.0.6
@angular/material 8.2.3
@ngtools/webpack 8.0.6
@schematics/angular 8.0.6
@schematics/update 0.800.6
rxjs 6.4.0
typescript 3.4.5
webpack 4.30.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ズレているかもしれませんが、

<td mat-cell *matCellDef="let element" [style.background-color]="element.course"> {{element.course}} </td>

ではいけませんか?

投稿2021/08/27 13:27

sassy

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問