我创建了一个带有复选框的用户页面,但遇到了一些问题:
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>
1条答案
按热度按时间aiqt4smr1#
乍一看,这可能与您使用
@input
和checked
属性有关,而不是使用v-model
。通常使用v-model
来控制Vue中表单字段的值更简单。你甚至可以使用一个对象。假设你使用的是Vue 3,权限的ID为
read
和write
,你可以这样做:第一个
当
permissions
被更新时,这将设置这些输入的值,并在复选框被选中或取消选中时依次更新permissions
对象。在加载时,你只需要初始化
permissions
对象,在保存时,读取它的数据。顺便提一下,在您的示例中,复选框是
ul
的直接子项,但如果您使用ul
作为结构,则每个复选框都应位于li
内。例如,这是我所说的