Angular 指令现在导致;Can';t绑定到';模糊';因为它不是';t'的已知属性;输入'&引用;

Angular 指令现在导致;Can';t绑定到';模糊';因为它不是';t'的已知属性;输入'&引用;,angular,angular-directive,angular-template,Angular,Angular Directive,Angular Template,在angular 4.3.2项目中,我们有一个指令.trim()s各种类型的输入。整体而言: import{Directive,ElementRef,forwardRef,HostBinding,renderr2}来自“@angular/core”; 从“@angular/forms”导入{ControlValueAccessor,NG_VALUE_ACCESSOR}; 常量修剪值存取器={ 提供:NG_值访问器, useExisting:forwardRef(()=>TrimDirective

在angular 4.3.2项目中,我们有一个指令
.trim()
s各种类型的输入。整体而言:

import{Directive,ElementRef,forwardRef,HostBinding,renderr2}来自“@angular/core”;
从“@angular/forms”导入{ControlValueAccessor,NG_VALUE_ACCESSOR};
常量修剪值存取器={
提供:NG_值访问器,
useExisting:forwardRef(()=>TrimDirective),
多:真的
};
@指示({
选择器:“输入[类型=文本]:不(#自动完成键盘访问):不([禁用]):不(.dropdown box),输入[类型=电子邮件]”,
提供者:[修剪值\访问器]
})
导出类指令实现ControlValueAccessor{
onChange=(uquo:any)=>{};
onTouched=()=>{};
构造函数(私有呈现器:Renderer2,私有elementRef:elementRef){}
@主机绑定('blur')
模糊(){
这个.ontoched();
}
@主机绑定('更改')
修剪(值:任意):无效{
如果(值){
value=value.toString().trim();
}
此.writeValue(值);
这个。onChange(值);
}
registerChange(fn:(值:any)=>any):void{this.onChange=fn;}
registerOnTouched(fn:()=>any):void{this.onTouched=fn;}
writeValue(值:任意):无效{
如果(值的类型!==“未定义”){
this.renderer.setProperty(this.elementRef.nativeElement,'value',value);
}
}
}
它被导入到相关的
@NgModule
中。类似地,
NgModule.imports[]
中也存在
FormsModule

在模板中,我现在在模板编译时出现以下错误(无论是在浏览器中还是在AoT中):

无法绑定到“blur”,因为它不是“input”的已知属性

无论指令应用在何处,都会引发错误

有问题的模板(可追溯到beta-6天,此后未进行重构):



在转换到Angular CLI之前,此指令起作用。由于正确导入了
FormsModule
(这通常是此错误的解释),因此我无法解释此指令的事件侦听器绑定导致此编译错误的原因。

input
元素上没有
blur
change
属性

我猜你在找
@HostListener

@HostListener('blur')
....
@HostListener('change')
@HostListener
装饰器允许您在


@HostBinding
将属性绑定到主机元素

输入
元素上没有
模糊
更改
属性

我猜你在找
@HostListener

@HostListener('blur')
....
@HostListener('change')
@HostListener
装饰器允许您在


@HostBinding
将属性绑定到主机元素

我可能会说一些愚蠢的话,请原谅。我想在主机绑定中可能存在模糊的名称冲突。你能测试一下@HostBinding('blur')onBlur(){…@Vega这不是一个愚蠢的猜测,框架经常做这种名称绑定,但真正的问题是下面。我可能会说一些愚蠢的话,请原谅。我想HostBinding中可能存在模糊的名称冲突。你能测试一下@HostBinding('blur')onBlur()吗{…@Vega这不是一个愚蠢的猜测,框架通常会进行这种名称绑定,但真正的问题如下。他可能混淆了hostbinding和hostlitner,可能会添加一些关于混淆的细节?哦!是的,我在许多其他遗留组件中发现了这一错误,但错过了这一个。奇怪的是,这是在使用
ng
编译UI。有没有其他的想法?他可能把hostbinding和hostlitner搞混了,可能会添加一些关于混淆的细节?哦!是的,我在许多其他遗留组件中发现了这个错误,但错过了这个。奇怪的是,这是在使用
ng
编译UI之前编译的。有没有额外的想法想想为什么会这样?