javascript - 单击输入或关注该输入时更改 BehaviorSubject
问题描述
我有一个输入指令。我需要当点击或关注它时,向其他组件发送一个标志。
@Directive({
selector: '[appDatepicker]'
})
export class DatepickerDirective implements DoCheck{
constructor(private el: ElementRef, private transport: TransportData<boolean>) {
}
ngDoCheck(): void {
let element = this.el.nativeElement;
if (element.onfocus !== null || element.onclick !== null) {
this.transport.setListValue(true);
} else {
this.transport.setListValue(false);
}
}
}
这是我的意见。
<input appDatepicker>
当页面加载时,属性为空onfocus
并且onclick
它是正确的,但我的问题在这里:当我点击输入时它没有做任何事情。我如何在 set 指令中收听输入BehaviorSubject
????
解决方案
要在指令中处理宿主元素事件,您可以使用@HostListener
.
@HostListener('focus', ['$event'])
focus(event) {
console.log('gained focus');
}
@HostListener('click', ['$event'])
click(event) {
console.log('clicked!');
}
@HostListener('blur', ['$event'])
blur(event) {
console.log('lost focus');
}
演示:https ://stackblitz.com/edit/angular-bg7rpl
发射事件
如果您愿意,您也可以从指令中发出自己的事件。
指令.ts
@Output() myfocus: EventEmitter<void> = new EventEmitter<void>();
@HostListener('focus', ['$event'])
focus(event) {
this.myfocus.emit();
}
组件.html
<input appDatepicker (myclick)="onClick()" />
推荐阅读
- javascript - 角度路线正在开发中,但不在产品中
- python - 调度,没有调度库
- c# - TwinCAT 的多线程消息过滤器
- javascript - 如何在 ejs 中存储和更新变量,在不同的路径上访问它
- xml - xsl:if 检查 ID 不在数组内
- filesystems - 如何减小 Jetson Nano .sdcard 闪存文件的大小?
- visual-c++ - 如何使用 msvc 编译器在 Windows 上编译 C++ 代码?
- google-cloud-platform - 使用“gsutil iam set”时出现错误“只能设置绑定和 etag 字段”
- ios - Api 给出错误的响应
- design-patterns - 游戏实现的设计模式