在 Angular4 按钮中重复调用函数
Duplicated call to function in Angular4 button
所以,我有一个 angular 这样的输入区域:
<div class="form-group row">
<div class="col-md-10">
<pre class="card card-block card-header">Search Publication by id: {{id}}</pre>
<input type="text"
class="form-control"
ngui-auto-complete
[(ngModel)]="id"
[source]="publications"
value-formatter="id, title"
list-formatter="id, title"
/>
<button class="btn btn-primary" (keyup.enter)="search(id.id)" (click)="search(id.id)">Search Publication</button>
</div>
</div>
这个想法是让用户可以选择通过键盘或鼠标调用搜索功能。
我发现的问题是调用重复,它为 keyup.enter 调用一次,为点击
调用一次
是否有任何不暗示自定义指令的简单方法可以避免这种情况?
听起来默认的浏览器行为正在复制您的事件 - 当您按下回车键时(当文本输入具有焦点时)会自动触发点击事件。
如果您从按钮中删除 (keyup.enter)
事件,它应该就可以正常工作 - 或者您可以跳过对浏览器的依赖并将该事件添加到输入字段,而不是按钮。
最简单、最干净的方法是创建一个真正的表单,它会响应按钮的单击和按键的按下 "enter"。
<form class="form-group" (ngSubmit)="search('test')">
<div class="row">
<div class="col-md-12">
<div>
<input type="text" class="form-control"/>
<button class="btn btn-primary"
type="submit">
Search Publication
</button>
</div>
</div>
</div>
</form>
您要调用的方法在 (ngSubmit) 中有详细说明。按钮必须是 "submit" 类型。
您需要在按下回车后停止事件传播。更改您的代码以使用 (keydown.enter)
而不是 (keyup.enter)
并在该方法之后添加 $event.preventDefault();
。
<button class="btn btn-primary"
(keydown.enter)="search(id.id); $event.preventDefault();"
(click)="search(id.id)">Search Publication</button>
Link 到 working demo.
在表单中 Enter 无论如何都会导致按钮触发点击事件,因此只需添加点击处理程序就可以了
<button class="btn btn-primary" (click)="search(id.id)">Search Publication</button>
所以,我有一个 angular 这样的输入区域:
<div class="form-group row">
<div class="col-md-10">
<pre class="card card-block card-header">Search Publication by id: {{id}}</pre>
<input type="text"
class="form-control"
ngui-auto-complete
[(ngModel)]="id"
[source]="publications"
value-formatter="id, title"
list-formatter="id, title"
/>
<button class="btn btn-primary" (keyup.enter)="search(id.id)" (click)="search(id.id)">Search Publication</button>
</div>
</div>
这个想法是让用户可以选择通过键盘或鼠标调用搜索功能。
我发现的问题是调用重复,它为 keyup.enter 调用一次,为点击
调用一次是否有任何不暗示自定义指令的简单方法可以避免这种情况?
听起来默认的浏览器行为正在复制您的事件 - 当您按下回车键时(当文本输入具有焦点时)会自动触发点击事件。
如果您从按钮中删除 (keyup.enter)
事件,它应该就可以正常工作 - 或者您可以跳过对浏览器的依赖并将该事件添加到输入字段,而不是按钮。
最简单、最干净的方法是创建一个真正的表单,它会响应按钮的单击和按键的按下 "enter"。
<form class="form-group" (ngSubmit)="search('test')">
<div class="row">
<div class="col-md-12">
<div>
<input type="text" class="form-control"/>
<button class="btn btn-primary"
type="submit">
Search Publication
</button>
</div>
</div>
</div>
</form>
您要调用的方法在 (ngSubmit) 中有详细说明。按钮必须是 "submit" 类型。
您需要在按下回车后停止事件传播。更改您的代码以使用 (keydown.enter)
而不是 (keyup.enter)
并在该方法之后添加 $event.preventDefault();
。
<button class="btn btn-primary"
(keydown.enter)="search(id.id); $event.preventDefault();"
(click)="search(id.id)">Search Publication</button>
Link 到 working demo.
在表单中 Enter 无论如何都会导致按钮触发点击事件,因此只需添加点击处理程序就可以了
<button class="btn btn-primary" (click)="search(id.id)">Search Publication</button>