angular - 如何在 Angular.io 中通过单击按钮更改输入值并触发输入事件
问题描述
我试图让一个按钮清除 Angular 6 中的文本输入元素。
<input #gf type="text" (input)="dt.filterGlobal($event.target.value, 'contains')">
<button (click)="gf.value = '';"></button>
在上面的标记中,我有一个 text 类型的输入,当数据输入到输入中时它调用 filterGlobal 方法。下面是一个按钮,单击时清除输入的值。当 clicke 时,文本从输入中消失,但输入元素的输入事件不会被触发,因此 filterGlobal 方法不会被调用。那里有什么问题吗?我认为更改模型的值会导致触发输入事件。
但是如果没有问题,我怎样才能从按钮的点击事件中触发触发器呢?如果我绝对必须这样做,我可以这样做:
<button (click)="gf.value = ''; dt.filterGlobal($event.target.value, 'contains')"></button>
但是现在我正在复制代码,如果有人在不更新点击事件处理程序的情况下更改了输入事件处理程序......
解决方案
只有当(input)
您在文本框中输入内容时,才会调用您的函数。随着按钮的点击,输入值会改变。但这不是用户在文本字段上输入的结果。因此你的函数不会被调用。
如果您想让您的函数在这种情况下被调用,我认为您应该绑定到该(change)
事件。每当输入字段发生变化并且您blur
从中更改时,都会调用它。
但是,如果您先从输入字段中模糊然后单击按钮,那将不起作用。
为了使其在这种情况下也能正常工作,请考虑dt.filterGlobal
在执行之前调用gf.value
但使用gf.value
而不是$event.target.value
.
<input
#gf
type="text"
(input)="dt.filterGlobal($event.target.value, 'contains')">
<button
(click)="dt.filterGlobal(gf.value, 'contains'); gf.value = '';">
Clear
</button>
这是您参考的工作 StackBlitz 示例。
推荐阅读
- statistics - 合理使用非线性回归模型
- node.js - express-session 动态 cookie 域
- node.js - 如何从 *.datasource.ts 创建数据库?
- reactjs - 将 create react app 升级到版本 4 给出:ReferenceError: Cannot access 'middleware' before initialization
- python - numpy 测试是否在另一个数组的行中的每个值
- apache-spark - 火花流作业与火花批处理作业之间的内存消耗差异
- python - 为什么 [[]]*10 是在 python 中创建 10 个空列表的方法,而不是 [[]*10]?
- sql-server - 如何确保 sp_xml_removedocument 始终运行
- javascript - 从 HTML 插入按钮