代码之家  ›  专栏  ›  技术社区  ›  Mike Kovetsky

指令中的Angular 2+附加类

  •  1
  • Mike Kovetsky  · 技术社区  · 7 年前

    我有Angular 6.0.0应用程序。需要将类动态附加到html元素。理想情况下,这应该通过指令来实现。 目前,我有类似的东西,它可以正常工作。

    <div class="class1 prefix-{{variable}}"></div>
    

    我想让前缀可重用,我正试图通过使用一个指令来达到更好的效果:

    html:

    <div class="class1" [appendBusinessLogicClass]="variable"></div>
    

    这是一节普通课。指令。ts:

    export class AppendBusinessLogicClass {
    readonly prefix = 'prefix';
      @HostBinding('class') class = ''; // this clears the html class1
      @Input('appendBusinessLogicClass') set appendBusinessLogicClass(variable: string) {
          this.class = this.prefix + '-' + variable;
       }
    }
    

    但是人质被释放了 class1 在html代码中。但我想补充一下 'prefix-rand' 到班级名单。 注意,我们不知道 variable 在编译时。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   Osman Cea    7 年前

    你现在实际做的是绑定到class属性,所以基本上这个值是 set this.class ,这很好。然而,事实证明,实际上并不是从“class”属性中获得初始值,这意味着无论设置什么 class 要在模板上显示,该值将始终被覆盖。基本上,Angular正在接管设置 属性

    所以,你要做的就是在 属性实际上,你可以考虑 html 属性作为组件/指令的输入,唯一需要做的就是用 @Input 室内装修设计师在这里,我们保存了 把某事归因于某人 defaultClassList 然后用它来计算新的 属性值,因此您的代码可以如下所示:

    export class AppendBusinessLogicClass {
        readonly prefix = 'prefix';
    
        @Input('class')
        defaultClassList;// `class` is a keyword so we're calling it defaultClassList instead
    
        @HostBinding('class')
        classList;// `class` is a keyword so we're calling it classList instead
    
        @Input('appendBusinessLogicClass') set appendBusinessLogicClass(variable: string) {
            this.classList = this.defaultClassList + " " + this.prefix + '-' + variable;
        }
    }
    

    总而言之,您最终得到了模板中定义的属性值,并将其包含在绑定中 this.classList 只要设置了传递给指令的值。