跟踪 formgroup 指令中所有子输入的模糊
Track on blur for all child inputs inside formgroup directive
我有一个 forgroup 机智一堆输入字段。我想为所有输入字段设置一个 onblur 事件,以将事件发送到外部分析。我不想用 onblur 甚至标记每个输入字段,而是想在表单组上设置它。
我可以使用 viewchildren 查询遍历元素,但我希望此功能可重用,所以我正在考虑创建一个指令。
我创建了一个指令并将其设置在表单组上,但显然无法使用指令查询 ViewChildren。
有没有办法创建一个查询所有输入字段的指令,然后为它们添加 n 个 onblur 侦听器?
像
这样的指令
@Directive({
selector: '[ngModel],[formControl],formControlName',
exportAs: 'child'
})
export class BlurDirective {
@HostListener('blur')_(){
const value=this.control?this.control.value:null;
const id=this.elementRef.nativeElement.getAttribute('id')
console.log(id,value)
}
constructor(private elementRef:ElementRef,
@Optional() @Self() private control:NgControl){}
}
使出“把戏”
根据你的问题描述,我认为如果你只是想添加 onBlur
事件,以便你可以捕获任何用户输入并将其发送到外部分析。
我会建议另一种方法。
您可能可以订阅 formGroup's
valueChanges
事件,并在每次更改或输入时将数据发送到分析服务。
this.yourForm.valueChanges.subscribe(formField => {
// TODO call external analytics service
})
我有一个 forgroup 机智一堆输入字段。我想为所有输入字段设置一个 onblur 事件,以将事件发送到外部分析。我不想用 onblur 甚至标记每个输入字段,而是想在表单组上设置它。 我可以使用 viewchildren 查询遍历元素,但我希望此功能可重用,所以我正在考虑创建一个指令。
我创建了一个指令并将其设置在表单组上,但显然无法使用指令查询 ViewChildren。
有没有办法创建一个查询所有输入字段的指令,然后为它们添加 n 个 onblur 侦听器?
像
这样的指令@Directive({
selector: '[ngModel],[formControl],formControlName',
exportAs: 'child'
})
export class BlurDirective {
@HostListener('blur')_(){
const value=this.control?this.control.value:null;
const id=this.elementRef.nativeElement.getAttribute('id')
console.log(id,value)
}
constructor(private elementRef:ElementRef,
@Optional() @Self() private control:NgControl){}
}
使出“把戏”
根据你的问题描述,我认为如果你只是想添加 onBlur
事件,以便你可以捕获任何用户输入并将其发送到外部分析。
我会建议另一种方法。
您可能可以订阅 formGroup's
valueChanges
事件,并在每次更改或输入时将数据发送到分析服务。
this.yourForm.valueChanges.subscribe(formField => {
// TODO call external analytics service
})