VueJs复选框问题

iaqfqrcu  于 2022-11-17  发布在  Vue.js
关注(0)|答案(1)|浏览(116)

我创建了一个带有复选框的用户页面,但遇到了一些问题:
1.重新加载后无法看到页面上的复选框,
1.我无法取消选中EditForm中的值,如果我尝试单击复选框,该值将被推送到数组中,即使它已经存在于数组中
脚本:

isChecked(teamPermission) {
    let checkStatus = this.currentTeam.permissions.some((permission) => {
        return teamPermission.id === permission.permissionType;
    });

    return checkStatus;
},

newPermission(permission) {
    // console.log("NewPermission", permission);
 
    this.currentTeam.permissions.push({
        permissionType:permission.id,
        teamId:this.currentTeam.id
    })

    this.newAssignedPermissions = this.currentTeam.permissions;
    // console.log('ASSIGNED PERMISSIONS', assignedPermissions)
    // console.log('NEW ASSIGNED PERMISSIONS', this.newAssignedPermissions);

    return this.newAssignedPermissions;
},

模板:

<ul
  v-for="permission in permissions"
  :key="permission.id"
>
  <input
    class="form-check-input mt-0"
    type="checkbox"
    :id="permission.id"
    :value="{ permissionType: permission.id }"
    :checked="isChecked(permission)"
    @input="newPermission(permission)"
    aria-label="Checkbox for following text input"
  />

  <label
    :for="permission.id"
    class="ms-2"
  >
    {{ permission.name.toLowerCase() }}
  </label>
</ul>

UI未显示现有权限,但当我单击“编辑”并选择新复选框时,UI显示选中的复选框,并且当我取消选中复选框时,它仍会推送值,从而产生重复的选中值:

<li
  v-for="givenPermissions in newAssignedPermissions"
  :key="givenPermissions.id"
>
  {{ permissions[givenPermissions.permissionType - 1].name.toLowerCase() }}
</li>
aiqt4smr

aiqt4smr1#

乍一看,这可能与您使用@inputchecked属性有关,而不是使用v-model。通常使用v-model来控制Vue中表单字段的值更简单。
你甚至可以使用一个对象。假设你使用的是Vue 3,权限的ID为readwrite,你可以这样做:
第一个
permissions被更新时,这将设置这些输入的值,并在复选框被选中或取消选中时依次更新permissions对象。
在加载时,你只需要初始化permissions对象,在保存时,读取它的数据。

顺便提一下,在您的示例中,复选框是ul的直接子项,但如果您使用ul作为结构,则每个复选框都应位于li内。

例如,这是我所说的

相关问题