Angular 角度2属性指令输入值未定义且未正确设置

Angular 角度2属性指令输入值未定义且未正确设置,angular,directive,Angular,Directive,我有以下指令(TextElementDirective),它有4个输入变量colorHex、fontFamily、fontWeight和fontStyle。我想使用此指令设置元素的颜色和样式 @指令( { 选择器:“[文本元素映射]”, //主持人:{ //“(mousemove)”:“onMouseMove()” // } } ) 导出类TextElementDirective{ @Input()colorHex:string; @Input()fontFamily:字符串; @输入()fon

我有以下指令(TextElementDirective),它有4个输入变量colorHex、fontFamily、fontWeight和fontStyle。我想使用此指令设置元素的颜色和样式

@指令(
{
选择器:“[文本元素映射]”,
//主持人:{
//“(mousemove)”:“onMouseMove()”
// }
}
)
导出类TextElementDirective{
@Input()colorHex:string;
@Input()fontFamily:字符串;
@输入()fontWeight:字符串;
@输入()字体样式:字符串;
构造函数(专用el:ElementRef){
这个.setElement();
}
setElement(){
if(此.colorHex){
this.el.nativeElement.style.color=this.colorHex;
}
如果(此.fontFamily){
this.el.nativeElement.style.fontFamily=this.fontFamily;
}
如果(这个重量){
this.el.nativeElement.style.fontWeight=this.fontWeight;
}
if(此.fontStyle){
this.el.nativeElement.style.fontStyle=this.fontStyle | | |“”;
}
}
onMouseMove(){
这个.setElement();
}
}
当我在另一个组件中使用此指令作为属性时,它不会设置元素样式和颜色。即使单击该按钮,也不会设置元素值

如果我在指令中使用主机(onmousemove),它可以正常工作。但我想在启动时设置这些值

你知道我错过了什么吗

下面是使用它的测试组件

@组件({
模板:
`
试验
文本元素映射:
更改此文本
点击
`,
指令:[TextElementDirective],
changeDetection:ChangeDetectionStrategy.Default
})
导出类TestComponent{
@ViewChild(TextElementDirective)
私有childTextElement:TextElementDirective;
colorHex:string=“#e2e2”;
fontFamily:string=“Arial”;
fontwweight:string=“正常”;
fontStyle:string=“normal”;
setCurrentDesignElement(){
此颜色={
十六进制:#B4“,
身份证号码:5745,
名称:“运动石南”
};
this.font={
cssString:“瓦莱拉回合”,
重量:“正常”,
样式:“斜体”
};
this.colorHex=“#b4”;
this.fontfamine=“Valera Round”;
this.fontwweight=“正常”;
this.fontStyle=“italic”;
//this.childTextElement.setElement();
}
}
Input()
s在构造函数中不可用。它们由更改检测设置,并且在实例化组件后运行更改检测。更改检测更新输入后,将调用生命周期挂钩
ngochanges
(每次更新)和
ngOnInit
(在第一次
ngochanges
调用后一次):

改变

构造函数(私有el:ElementRef){
这个.setElement();
}

构造函数(私有el:ElementRef){};
恩戈尼尼特(){
这个.setElement();
}
初始化输入后调用
ngOnInit()


而不是

this.el.nativeElement.style.color=this.colorHex;
最好用

@HostBinding('style.color'))
@Input()colorHex:string;
@主机绑定('style.font系列')
@Input()fontFamily:字符串;
@主机绑定('style.font-weight')
@输入()fontWeight:字符串;
@主机绑定('style.font-style')
@输入()字体样式:字符串;

实际上,我还没有尝试在同一个字段上添加
@HostBinding()
@Input()
,但我不明白为什么它不起作用。

当指令初始化时,它就起作用了。但当我点击按钮重置colorHex、fontFamily等时。。它不会重置文本。如何确保在模型更改时调用setElement()?为什么更改检测没有接管?有两种方法:make
colorHex
。。。setter和getter或将
ngOnInit()
更改为
ngOnChanges(更改)
<每次输入值更改时都会调用code>ngOnChanges。根据我上面的建议,您根本不需要
setElement()
。Doh!现在很明显。谢谢。ctor不应该改为‘constructor(private el:ElementRef){}’?@Drammy-thanky-fixed(混合了一些Dart语法;-))