Angular 5 多个事件未调用

Angular 5 multiple events not calling

我正在尝试在 angular5 中构建示例应用程序。代码示例如下。 问题是在单击任何 table 行后,它仅触发文本框模糊事件并且未触发 table 行单击事件。 我的要求是先触发 table 行点击事件,然后触发文本框模糊事件。有什么建议吗?

test.component.html

  <div class="container">
  <h1>Angular events</h1>
  <hr />
  <div class="row">
    <div class="col-xl">
      <input #inputText type="text" (keyup)="filterList(inputText.value)" (blur)="hideList()" />
      <table class="table" *ngIf="showList">
        <thead>
          <tr>
            <th scope="col">name</th>
            <th scope="col">date</th>
            <th scope="col">time</th>
            <th scope="col">price</th>
          </tr>
        </thead>
        <tbody>
          <tr *ngFor="let event of gridEventList" (click)="selectItem($event)">
            <td>{{event.name}}</td>
            <td>{{event.date}}</td>
            <td>{{event.time}}</td>
            <td>{{event.price}}</td>
          </tr>
        </tbody>
      </table>
      </div>
    </div>
</div>

test.component.ts

filterList(input:string) {
        console.log("filter list")
    }

    selectItem(event){ 
      console.log("select event row values")
    }

    hideList(){
      console.log("text lost focus")
    }

My requirement is to get table row click event fired first and then textbox blur event

您最好从 selectItem() 内部调用 hideList(),这样您就可以始终确保在选择 <tr> 之后触发它。我建议完全放弃模糊事件,然后就..

selectItem(evt){ 
    console.log("select event row values");
    this.hideList();
}

但是...如果你真的需要模糊事件,那么你需要交换:

<tr *ngFor="let event of gridEventList" (click)="selectItem($event)">

至:

<tr *ngFor="let event of gridEventList" (mousedown)="selectItem($event)">

这是因为点击事件的顺序是:mousedown > blur > click

The mousedown and blur events occur one after another when you press the mouse button, but click only occurs when you release it. Reference.