Angular2では、これを行うことでクラスの「赤」をコンポーネントのセレクター要素に追加できることを知っています。
@Component({
selector: 'selector-el',
Host: {
'[class.red]': 'true'
},
...
})
NgClassで行うことと同様に、ホストにdynamicクラスを追加する方法があるかどうか疑問に思っています(NgClassは実際にはサポートされていないことを知っているので、可能な解決策を探しています):
@Component({
selector: 'selector-el',
Host: {
'[NgClass]': 'colorClass'
},
...
})
...
constructor(){
this.colorClass = 'red';
}
次のようなものを使用できます。
@Directive({
(...)
Host: {
'[class.className]' : 'className',
'[class]' : 'classNames'
}
}
export class MyDirective {
constructor() {
this.className = true;
this.classNames = 'class1 class2 class3';
}
}
Renderer
s setElementClass
を使用して、任意のクラスを追加または削除できます。例えば md-[color]
ここで、color
は入力によって提供されます
<some-cmp [color]="red">
@Component({
// @Directive({
selector: 'some-cmp',
template: '...'
})
export class SomeComp {
_color: string;
@Input()
set color(color: string) {
this._color = color;
this.renderer.setElementClass(this.elementRef.nativeElement, 'md-' + this._color, true);
}
get color(): string {
return this._color;
}
constructor(private elementRef: ElementRef, private renderer: Renderer){}
}
nativeElement.classList.add()alternative も参照してください
外部から変更したい場合は、_@HostBinding
_と@Input()
を組み合わせることができます。
_@Component({
selector: 'my-component',
template: ``
})
export class MyComponent {
@HostBinding('class.your-class') @Input() isSelected: boolean;
}
_
import {Component, HostBinding} from 'angular2/core';
@Component({
(...)
}
export class MyComponent {
@HostBinding('class') colorClass = 'red';
}
私は最近_<ng-Host>
_( この問題 に触発された)というディレクティブを作成しました。
_@Component({
template: `
<ng-Host [ngClass]="{foo: true, bar: false}"></ng-Host>
<p>Hello World!</p>
`
})
class AppComponent { }
_
オンラインデモは こちら にあります。
定義済みのサポートされる使用法 ここ 。
サービスとしてのDirective as a Serviceパターン、つまりNgClass
を手動で提供し、( online demo )
DIメカニズムにより、NgClass
は現在のHost要素のElementRef
を取得します。Self()
修飾子はそれを保証するのに役立ちます。したがって、コンストラクターでインスタンスを作成する必要はありません。したがって、パブリックAPIを使用しています。
クラス継承と組み合わせるとより簡潔になる可能性があります。例は here にあります。
次のことができます。
import {Component} from "@angular/core"
@Component({
selector: "[textbox]",
Host: {"class": "first-class secondClass ThirdClass AnYClaSs"},
template: ...
})
export class MyComponent { }
これは、変数を導入するよりも簡単な方法です。
Angular2 rc5、rc6、rc7、finalで動作します。以前のバージョンでも動作する可能性がありますが、試しませんでした。