网站搜索

javascript - 在 Angular 的自定义指令中访问 CSS 变量的最佳方法


我有一个关于...的问题。我们如何将以下语句转换为 Angular 的 Renderer2?

this.elementRef.nativeElement.style.setProperty( '--primary-color ' , '#455363' )

以上语句是在选择暗模式时将 css-变量更改为指令。在 Angular 中直接访问 DOM 并不是好的做法,所以我们使用 renderer2。但是我不知道如何将以上语句转换为 renderer2 以安全地访问 DOM。

非常简单地,有人能告诉我如何使用 renderer2 在指令中安全地更改 CSS 变量,或者获取 CSS 变量到指令中的最佳方法吗。

谢谢你。

答案#1

当我详细了解 renderer2 的 setStyle() 时,我们可以传递给它的参数总共有四个。

/**
    * Implement this callback to set a CSS style for an element in the DOM.
    * @param el The element.
    * @param style The name of the style.
    * @param value The new value.
    * @param flags Flags for style variations. No flags are set by default. enum: 1 or 2, 
      1: Marks a style as important.   
      2: Marks a style as using dash case naming (this-is-dash-case).
*/

abstract setStyle(el: any, style: string, value: any, flags?: RendererStyleFlags2): void;

现在我们可以传递第四个参数 2,这将有助于使用 - 风格的变量来定义 css 变量,没有 2 参数 setStyle() 将无法识别 cas 变量。所以这实际上就是我对我问题的答案。

`this.renderer.setStyle(this.elementRef.nativeElement, `--primary-color`, '#455363' , 2 )` 

答案#2

我相信你正在寻找类似这样的东西:

constructor(private renderer: Renderer2, private elementRef: ElementRef) {}

ngOnInit() {
  this.renderer.setStyle(
    this.elementRef.nativeElement,
    '--primary-color',
    '#455363'
  );
}