typescript 星云复选框被视为选中,但未亮起

h7wcgrx3  于 2023-06-30  发布在  TypeScript
关注(0)|答案(1)|浏览(122)

我正在处理一个Angular组件,其中有Nebular复选框。
当我第一次点击任何复选框时,点击事件被注册,与之关联的动作被执行。但是,复选框不亮起。
以下是涉及此复选框的HTML和TS的代码以及问题的屏幕截图。

在第一张图片中,我点击了复选框(原来旁边显示的是“false”),文本变成了“true”(这是预期的行为)。
在第二张图中,您可以看到生成的HTML中的“ng-reflect-checked”设置为“true”,这是复选框被认为选中的另一个标志。
现在是HTML和相关函数的代码:

<nb-checkbox *ngIf="globalSettings.showMultipleSelection" class="list-checkbox clickable" (click)="toggleSelectedItem(item, $event)"
                             [checked]="itemSelected( item )" >{{itemSelected(item)}}</nb-checkbox>
itemSelected( item ) {
    const key = this.utilsService. getObjectValue( item, this.globalSettings.multipleSelectionKey )
    return (this.selectedItems.findIndex( ( elem ) => elem === key ) >= 0)
  }

toggleSelectedItem(item, $event ) {
    const key = this.utilsService.getObjectValue( item, this.globalSettings.multipleSelectionKey )
    const tmpIndex = this.selectedItems.findIndex( ( elem ) => elem === key )
    $event.stopPropagation()
    if ( tmpIndex >= 0 ) {
      this.selectedItems.splice( tmpIndex, 1 )
      this.emitSelectedItems( 'remove', [ key ]  )

    } else {
      this.selectedItems.push( key )
      this.emitSelectedItems( 'add', [ key ]  )

    }
    this.selectedItems = JSON.parse( JSON.stringify( this.selectedItems ) )
    this.onSelectedItemChange()
  }

在我们的例子中,itemSelected函数在项位于名为“selectedItems”的数组中时发送true,否则发送false。toggleSelectedItem在数组中添加或删除项。
再一次,代码工作正常,并具有预期的行为,唯一的问题是复选框不亮。
我已经检查了是否有任何CSS与我的复选框冲突,但没有。我还删除了(onRowClick),看看它是否不是事件顺序问题,它仍然没有亮起来。我也试过修改TS和HTML,但都不起作用。
提前感谢您的帮助!

hl0ma9xz

hl0ma9xz1#

这个问题的解决方案是我没有在nb-checkbox中使用正确的事件。我应该使用(checkedChange)=“toggleSelectedItem(item,$event)”而不是(click)=“toggleSelectedItem(item,$event)"。
我的理解是:这是因为在您单击元素所占据的区域(在我们的示例中,是nb-checkbox)之后,会触发事件“click”。所以,第一次,你实际上并没有点击复选框,而是点击了页面上复选框的位置。然而,“checkedChange”特定于复选框。
如果有人发现我的回答有问题,请告诉我。毕竟,这只是我的猜测。

相关问题