角度材料表:取消绑定复选框单击从行

cla*_*tic 5 html angular-material angular

我正在尝试从表格行中解除行选择的绑定,以便单击行内的任意位置不会勾选复选框。我希望只在单击框本身时勾选复选框,以便在用户单击其他地方(有点像 Gmail 收件箱)时,我可以腾出空间来添加可扩展的行。

我只是不知道如何从行中取消绑定复选框。

这是复选框列的标记

  <ng-container matColumnDef="select">
    <th mat-header-cell *matHeaderCellDef>
      <mat-checkbox (change)="$event ? masterToggle() : null"
                    (click)="$event.stopPropagation()"
                    [checked]="selection.hasValue() && isAllSelected()"
                    [indeterminate]="selection.hasValue() && !isAllSelected()"
                    [aria-label]="checkboxLabel()">
      </mat-checkbox>
    </th>
    <td mat-cell *matCellDef="let row">
      <mat-checkbox (click)="$event.stopPropagation()"
                    (change)="$event ? selection.toggle(row) : null"
                    [checked]="selection.isSelected(row)"
                    [aria-label]="checkboxLabel(row)">
      </mat-checkbox>
    </td>
  </ng-container>
Run Code Online (Sandbox Code Playgroud)

nas*_*h11 6

我在您的问题中没有看到相关的模板代码,但看起来您正在遵循材料文档中给出的示例。这种情况下,在, 在底部,将有以下代码mat-table

<tr mat-row *matRowDef="let row; columns: displayedColumns;"
      (click)="selection.toggle(row)">
</tr>
Run Code Online (Sandbox Code Playgroud)

只需删除click切换row到选定的事件

<tr mat-row *matRowDef="let row; columns: displayedColumns;">
</tr>
Run Code Online (Sandbox Code Playgroud)

现在您的复选框不会在单击行时被选中。

注意:这样做也意味着$event.stopPropagation()不再需要使用,因此您也可以继续将其从模板中删除。