我会尽力解释这一点。 我的表单中有一个选择,用户可以在多个合同之间进行选择,一旦他选择其中一个,我想在保存之前从所选合同中删除项目。
合约有 ID、姓名等......以及角色列表,目前我希望能够在该列表中仅保留一个角色,因此我必须在保存之前删除其他角色。
这是我的选择:
<v-autocomplete
v-model="contract"
:items="contractsData"
item-text="name"
hide-details="auto"
light
solo
dense
clearable
return-object
></v-autocomplete>
此处选择的合约是一个如下所示的对象:
{
"id": "id-contract-001",
"name": "contract1",
"roles": [
{
"id": "id-role-001",
"name": "admin",
"description": "can view, create, update & delete"
},
{
"id": "id-role-002",
"name": "operator",
"description": "can view & create"
},
{
"id": "id-role-003",
"name": "user",
"description": "can only view"
}
]
},
这是我尝试只保留我想保留的角色的方法:
getContractUserRole(contract) {
let rolesList = contract.roles
rolesList.forEach((role) => {
if (role.name === 'user') {
this.contract = {
id: contract.id,
name: contract.name,
roles: [
{
id: role.id,
name: role.name,
description: role.description,
},
],
}
}
})
},
我在我的帖子请求中调用这个方法:
await this.$axios
.$post(uri, {
username: this.username,
firstname: this.firstname,
lastname: this.lastname,
email: this.email,
password: this.password,
contracts: this.getContractUserRole(this.contract),
我必须补充一点,我不能只将
role.id
和 role.name
放入我想要保留的角色中,因为在每个合同中 role.id
都是不同的,所以我必须在所选合同中搜索角色。
当我尝试使用此方法时,我收到错误
Cannot read properties of undefined (reading 'forEach')
,我知道我的所有合同都有角色,所以我不明白到底缺少什么?也许我的方法不是最好的,有谁知道我可以做到这一点的最佳方法吗?
编辑:为问题添加更多详细信息。
如果您只是想更改发布数据,请尝试以下功能。
getContractUserRole(contract) {
let rolesList = contract.roles
const res = {
id: contract.id,
name: contract.name,
roles: []
}
rolesList.forEach((role) => {
if (role.name === 'user') {
res.roles.push(role)
}
})
return res
}