javascript - 单击 Angular 5 时停止执行其他函数

标签 javascript angular angular-material

我有一个 Angular Material 表,单击时每个表行都会展开

在最后一个单元格中,我使用 ComponentFactory 动态加载组件,加载的组件是一个下拉列表。

我遇到的问题是,当单击下拉菜单时,表格行将扩展和收缩。

这就是我向行添加功能的方法

  <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
    <mat-row *matRowDef="let row; columns: displayedColumns;let index=index" (click)="expandRow(index, row)" #myRow></mat-row>

这是加载用户侧菜单的单元格:

  <ng-container *ngIf="column === 'viewSelection'">
    <ng-container matColumnDef="viewSelection">
      <mat-header-cell *matHeaderCellDef></mat-header-cell>
      <mat-cell *matCellDef="let row">
        <ng-container #sideMenu></ng-container>
        <!-- <user-side-menu></user-side-menu> -->
      </mat-cell>
    </ng-container>
  </ng-container>

如何加载用户菜单,效果很好:

  let sideMenu = this.sideMenu.toArray()
      for (let i = 0; i < sideMenu.length; i++) {
        const factory = this.resolver.resolveComponentFactory(this.ellipsis);
        let container = this.sideMenu.toArray()[i]

        const ellipsisComponent = container.createComponent(factory);
        ellipsisComponent.instance.data = this.returnedData[i]
        console.log(container, ellipsisComponent.data);

加载用户菜单的 Html:

<a aria-expanded="false" aria-haspopup="true" class="btn btn-icon has-dropdown" data-toggle="dropdown" id="grid-menu">
  <i class="ion-more"></i>
</a>
<div class="c-dropdown__menu dropdown-menu" aria-labelledby="grid-menu">
  <a class="c-dropdown__item dropdown-item" (click)="viewUser({Id:data?.Id}, $event);  $event.preventDefault()" >View/Edit User</a>
  <a *ngIf="data?.IsActive" class="c-dropdown__item dropdown-item" (click)="activeDeactivateUser(data?.Id, false);  $event.preventDefault()" data-toggle="modal" data-target="#deactivate-member">Deactivate User</a>
  <a *ngIf="!data?.IsActive" class="c-dropdown__item dropdown-item" (click)="activeDeactivateUser(data?.Id, true);  $event.preventDefault()" data-toggle="modal" data-target="#activate-member">Activate User</a>
</div>

正如你所看到的,我正在使用阻止默认值,这没有任何作用,已经尝试过 停止传播,但这会阻止我想要执行的函数执行

希望有人能指出我正确的方向

最佳答案

您需要使用stopPropagation()来阻止事件传递到父DOM。您可以使用 preventDefault() 来阻止对事件对象执行默认事件操作。例如,对于 anchor 元素,默认的单击操作是打开链接,因此如果您想实现特殊检查以防止在特定条件下打开链接,您可以使用 preventDefault( )(click) 回调函数中执行此操作。但如果你想阻止点击事件传递给父元素,你可以使用 stopPropagation():

<span onclick="alert('You've already visited Stack Overflow')">
    <a href="https://stackoverflow.com" (click)="visitStack($event)">
        Stack Overflow
    </a>
</span>

stackVisited = false;
visitStack(event) {
    if (this.stackVisited) {
        event.preventDefault();
    } else {
        this.stackVisited = true;
        event.stopPropagation();
    }
}

关于javascript - 单击 Angular 5 时停止执行其他函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50066460/

相关文章:

javascript - IE 7 条件与 javascript

Angular + firebase auth + Material =路由器崩溃

javascript - 自动完成未从对象属性 Angular 中检测到正确的值

angular - 如何将带有按钮的列添加到带有循环的表格中?

angular - 在 Angular 中使用控制值访问器时出错

angular - mdOption 的 (onSelectChange) 输出始终传递列表中的第一项

javascript - 是否有任一个 (R.either) 的可变参数版本?

javascript - 从数组中的值范围与 javaScript 中的给定值获取关联值

通过 Tomcat 阀启用重写后,Javascript 被加载两次

javascript - 访问 RxJs Observable 方法调用返回的数据