将 HTML 类设置为托管在 Angular 指令中

Posted

技术标签:

【中文标题】将 HTML 类设置为托管在 Angular 指令中【英文标题】:Set an HTML class to host in an Angular directive 【发布时间】:2020-10-09 13:30:18 【问题描述】:

您将如何添加和设置一个可以通过参数更改的 html 类,使用 Angular 指令? 假设我们有一个已经存在类的 div,但没有指令:

<div class="myClass"></div>

现在,我们要为其附加一个指令和一个参数:

<div directiveName set="X" class="myClass myClass-X"></div>

如果我需要一个 4,那么我的动态添加的类将像这样更改:

<div directiveName set="4" class="myClass myClass-4"></div>

我完全知道如何使用@hostbinding 添加一个类,但我找不到如何使用我的“set”参数动态更改这个类

非常感谢

【问题讨论】:

真的不知道你在这里问什么...angular.io/api/common/NgClass。您是否看过 ngClass 为样式 html 分配条件? 我不明白你的意思。是否要根据从指令内部传递给 set 属性的值添加一个类? @Keff 没错!就像在 javascript 中一样:element.classList.add("myclass-" + set),但来自指令内部。这样当没有指令存在时,就不需要这个类或 ngClass 我建议阅读这篇文章angular.io/guide/attribute-directives,它解释了如何访问 ElementRef,然后您可以像在 Vanilla JS 中一样使用它。 【参考方案1】:

如果我正确理解了您的问题,可以按如下方式完成:

我是凭记忆做的,也许有些事情没有按预期工作,但我想你明白了。

import  Directive, ElementRef  from '@angular/core';

@Directive(
  selector: '[directiveName]'
)
export class HighlightDirective 
    constructor(el: ElementRef) 
       
       // Check if element has the 'set' directive.
       if('set' in el.nativeElement.attributes)
         // Get the "set" attribute.
         const setAttribute = el.nativeElement.getAttribute('set');

         // Add the class to the element.
         el.nativeElement.classList.add(setAttribute);
       
    

“您在指令的构造函数中使用 ElementRef 来注入对宿主 DOM 元素的引用,即您应用了 'directiveName' 的元素。”

我建议检查this 页面,它非常详细地解释了指令的工作原理。

【讨论】:

哇!谢谢你,先生 !对我来说,这样做更容易!

以上是关于将 HTML 类设置为托管在 Angular 指令中的主要内容,如果未能解决你的问题,请参考以下文章

将 BEM CSS 与 Angular 指令一起使用

Angular/NgForm/NgModel 指令错误:没有将“exportAs”设置为“ngForm”的指令

Angular2 问题:没有将“exportAs”设置为“ngForm”的指令

如何将 Angular 指令设置为在 Javascript 中创建的 DOM 元素

Angular 4中的模板解析错误“没有将exportAs设置为ngModel的指令”

Angular 使用带有 @HostListener 的指令来更新 ReactiveForm 的输入值是将输入设置为 ngValid 而不是 ngInvalid