Angular 2如何在选项中添加click事件?

nir*_*han 4 html javascript angularjs

这是我的HTML,当我点击选项"new-item"它将打开输入类型框,然后我输入要添加到选择选项的值

<form (submit)="addItem()">
    <input type="text" [(ngModel)]="add.name" name="name">
    <input type="text" [(ngModel)]="add.price" name="price">
    <input type="text" [(ngModel)]="add.description" name="description">
    <select [(ngModel)]="add.type" name="room-type">
        <option [value]="c">Select</option>
        <option>BreakFast</option>
        <option>Lunch</option>
        <option>Dinner</option>
        <option><button (click)="addSelect()">Add-item</button></option>
        <input *ngIf='edited' type="text" >
   </select>
Run Code Online (Sandbox Code Playgroud)

我的类型脚本是,

addSelect() {
        this.edited = true;
}
constructor() {
    this.edited = false;
}
Run Code Online (Sandbox Code Playgroud)

Zze*_*Zze 6

您无法将此类事件添加到<option>.

您可以看到事件不会在所有浏览器中触发(它所使用的唯一浏览器是<ie11和Firefox):

$("#trig").click((event) => console.log(event));
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
  <option>default</option>
  <option id="trig">trigger</option>
</select>
Run Code Online (Sandbox Code Playgroud)

标签不会向下传播任何点击事件.因此,您尝试在选项中分配的任何点击事件都不起作用.您最好的选择是查看onChange()回调中收到的值,然后打开另一个允许用户输入数据的组件.您甚至可以使用a window.prompt()来获取此类数据.

你可以这样做:

<select (change)="onChange($event.target.value)">

onChange(val) {
    console.log(val);
    this.edited = false;
}
Run Code Online (Sandbox Code Playgroud)

有关实现此方法的更多信息,请参阅:如何在Angular 2中的"select"中获取新选择?