javascript - 聚焦自定义输入时未触发角度单击事件
问题描述
eu-input
我使用“ControlValueAccessor”创建了简单的自定义输入元素。现在我有类似的东西:
<eu-input></eu-input>
<div *ngFor="let item of items" (click)="choose(item)">
<span>{{item.name}}</span>
</div>
但是有一个问题我想不通。当eu-input
被聚焦时,点击事件不会被触发,它只会在eu-input
被模糊后触发(第二次尝试)。那么可能是什么问题?
这是html:
<input [(ngModel)]="value"/>local: {{val}}
这是 ts 文件:
import { Component, OnInit, forwardRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
@Component({
selector: 'eu-input',
templateUrl: './eu-input.component.html',
styleUrls: ['./eu-input.component.scss'],
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => EuInputComponent),
multi: true,
},
],
})
export class EuInputComponent implements OnInit, ControlValueAccessor {
constructor() {}
ngOnInit(): void {}
onChange: any = () => {};
onTouch: any = () => {};
val = '';
set value(val) {
if (val !== undefined && this.val !== val) {
this.val = val;
this.onChange(val);
this.onTouch(val);
}
}
writeValue(value: any) {
this.value = value;
}
registerOnChange(fn: any) {
this.onChange = fn;
}
registerOnTouched(fn: any) {
this.onTouch = fn;
}
}
choose() 方法就是 console.log('choose clicked')
解决方案
将 eu-input 组件 html 更改为
<input [(ngModel)]="value" (focus)="emitFocused(true)" (blur)="emitFocused(false)"/>local: {{val}}
在 eu-input TypeScript 中
@Output() focus = new EventEmitter();
public emitFocused(value) {
this.focus.emit(value);
}
可以像这样使用
<eu-input (focus)="myMethod($event)"></eu-input>
推荐阅读
- javascript - localhost无法连接节点js
- html - 用于数学运算的 HTML 中的简单对齐/缩进
- mysql - mysql出错时的sum case
- javascript - 如何在没有 responseCallback 的情况下使用 chrome.runtime.sendMessage?
- amazon-web-services - Terraform AWS role policy fails when adding permissions
- vba - VBA: Looping through column with dynamic data set and deleting specific text from each cell
- python - 随机模块,包含和或排除
- ibm-watson - 如何通过 document-uploader-node 将 .doc 类型的文件上传到 Discovery 服务?
- excel - Excel从具有重复项的列表中创建唯一列表
- oracle - 运行 Oracle Forms and Reports Builder 时如何摆脱 Windows XP 模式?