我目前正在学习Angular 2.我知道如何使用Angular Renderer
设置ElementStyle
,但现在我想使用Renderer
方法:
setElementClass(renderElement: any, className: string, isAdd: boolean) : void
我的问题是如何将CSS类导入到我的属性指令中? 我必须将我的CSS类转换为JSON吗?
我目前正在学习Angular 2.我知道如何使用Angular Renderer
设置ElementStyle
,但现在我想使用Renderer
方法:
setElementClass(renderElement: any, className: string, isAdd: boolean) : void
我的问题是如何将CSS类导入到我的属性指令中? 我必须将我的CSS类转换为JSON吗?
最初的OP询问如何使用渲染器.为了完整起见,我加入了@HostBinding.
要向元素添加类,可以使用@HostBinding
import { Directive, HostBinding} from '@angular/core';
@Directive({
selector: '[myDirective]',
})
export class MyDirective {
@HostBinding('class')
elementClass = 'custom-theme';
constructor() {
}
}
为了让多个类更易于使用,您可以使用ES6 getter并在返回之前将这些类连接在一起:
import { Directive, HostBinding} from '@angular/core';
@Directive({
selector: '[myDirective]',
})
export class MyDirective {
protected _elementClass: string[] = [];
@Input('class')
@HostBinding('class')
get elementClass(): string {
return this._elementClass.join(' ');
}
set(val: string) {
this._elementClass = val.split(' ');
}
constructor() {
this._elementClass.push('custom-theme');
this._elementClass.push('another-class');
}
}
更低级的API是Renderer2.如果有一组要应用于元素的动态类,则Render2非常有用.
Example:个
import { Directive, ElementRef, Renderer2 } from '@angular/core';
@Directive({
selector: '[myDirective]',
})
export class MyDirective {
constructor(private renderer: Renderer2, hostElement: ElementRef) {
renderer.addClass(hostElement.nativeElement, 'custom-theme');
}
}