我已经定义了一个自定义属性指令:
import { Directive, ElementRef } from '@angular/core';
@Directive({
selector: '.vvdirective'
})
export class VVdirectiveDirective {
constructor(private elRef: ElementRef) {}
ngOnInit() {
this.elRef.nativeElement.style.backgroundColor = "gray";
this.elRef.nativeElement.style.color = "navy";
console.log("vv directive works!!")
}
}
它使用灰色背景和深蓝色字体颜色更改共享“vvdirective”CSS 类的元素。它还打印控制台消息。
它适用于传统用例:
<div class="vvdirective">My custom attribute directive works in a plain old fashion way !</div>
但
当我想在组件中使用此指令时:
HTML:
<div [ngClass]="klass" >My custom attribute directive works even embedded in a component</div>
&TS:
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-vvdiv',
templateUrl: './vvdiv.component.html',
styleUrls: ['./vvdiv.component.scss']
})
export class VvdivComponent implements OnInit {
@Input() klass: string;
constructor() { }
ngOnInit() {
}
}
& 调用 APP TS:
<app-vvdiv klass="vvdirective"></app-vvdiv>
它不起作用(背景/字体颜色不会改变,也不会打印控制台消息):
它应该是这样的:
令我惊讶的是,最后两个代码示例(一个带有老式指令调用的示例,以及一个通过组件调用的示例)都具有 CSS 类:
但只有第一个(未嵌入组件中)受指令更改的影响。
看起来在后一种情况下组件中使用的 ngClass 指令的工作方式不同。
可能跟app的生命周期有关,我不知道。
因此,如果您知道如何同时使用 ngClass 和我的自定义指令来制作组件,我会密切关注您的回答!
这里是Plunker: plunker
这里是 GITHUB 存储库:git repo
最好的,