`ngClass` ディレクティブでホスト要素に動的にクラスを追加/削除する
Angularでホスト要素にクラスを追加する方法
テンプレート構文を使用する
ngClass ディレクティブを使用する
ngClass
ディレクティブは、コンポーネントのホスト要素に動的にクラスを追加または削除するために使用できます。
<div [ngClass]="{'active': isActive}">
コンポーネントの内容
</div>
この例では、isActive
プロパティが true
の場合、active
クラスがホスト要素に追加されます。
<div [ngStyle]="{'background-color': isActive ? 'red' : 'green'}">
コンポーネントの内容
</div>
この例では、isActive
プロパティが true
の場合、ホスト要素の背景色が赤になります。
コンポーネントクラスを使用する
@HostBinding デコレータを使用する
@HostBinding
デコレータは、コンポーネントクラスのメンバー変数をホスト要素のプロパティにバインドするために使用できます。
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent {
@HostBinding('class.active') isActive = false;
constructor() {}
}
Renderer2 サービスを使用する
Renderer2
サービスは、DOM要素を操作するために使用できます。
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent {
constructor(private renderer: Renderer2) {}
ngOnInit() {
this.renderer.addClass(this.elementRef.nativeElement, 'active');
}
}
この例では、ngOnInit
ライフサイクルフック内で、Renderer2
サービスを使用して active
クラスがホスト要素に追加されます。
上記以外にも、ホスト要素にクラスを追加する方法はいくつかあります。
ElementRef
サービスを使用して、DOM要素を直接操作することができます。@Input
デコレータを使用して、親コンポーネントからクラスを受け渡すことができます。
<div [ngClass]="{'active': isActive}">
コンポーネントの内容
</div>
<div [ngStyle]="{'background-color': isActive ? 'red' : 'green'}">
コンポーネントの内容
</div>
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent {
@HostBinding('class.active') isActive = false;
constructor() {}
}
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent {
constructor(private renderer: Renderer2) {}
ngOnInit() {
this.renderer.addClass(this.elementRef.nativeElement, 'active');
}
}
ホスト要素にクラスを追加する他の方法
@HostListener
デコレータを使用して、ホスト要素のイベントにリスナーを追加することができます。
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent {
@HostListener('click') onClick() {
this.renderer.addClass(this.elementRef.nativeElement, 'active');
}
constructor(private renderer: Renderer2) {}
}
この例では、ホスト要素がクリックされたときに、active
クラスがホスト要素に追加されます。
ngAfterViewInit ライフサイクルフックを使用する
ngAfterViewInit
ライフサイクルフックは、コンポーネントのビューが初期化された後に呼び出されます。
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent {
ngAfterViewInit() {
this.renderer.addClass(this.elementRef.nativeElement, 'active');
}
constructor(private renderer: Renderer2) {}
}
style 属性を使用する
コンポーネントのテンプレートで style
属性を使用して、ホスト要素に直接スタイルを適用することができます。
<div style="background-color: red">
コンポーネントの内容
</div>
この例では、ホスト要素の背景色が赤になります。
class 属性を使用する
<div class="active">
コンポーネントの内容
</div>
この例では、active
クラスがホスト要素に追加されます。
どの方法を使用するべきか
- 動的にクラスを追加または削除する必要がある場合は、
ngClass
ディレクティブを使用するのが最善の方法です。 - コンポーネントの初期化時にのみクラスを追加する必要がある場合は、
@HostBinding
デコレータまたはngAfterViewInit
ライフサイクルフックを使用するのが最善の方法です。 - 静的にクラスを追加する必要がある場合は、
style
属性またはclass
属性を使用するのが最善の方法です。
angular angular2-template