项目中用到了element-ui的el-table组件,在表格中加入了下拉框,下拉框实现默认显示第一条数据。
v-model的值不知如何定义:服务器列表是个数组,每行的数据都不一样,如果绑定一个data中的一个变量,那么每一行绑定的值都是一样的,而且还不能默认显示第一值。
下面是错误示例:在data中定义一个变量serverId
<el-table ref="table":data="tableData" highlight current-row stripe style="width: 100%">
<el-table-column type="selection" width="55" align="center" />
<el-table-column prop="name" label="项目名称" />
<el-table-column prop="servers" label="服务器列表">
<template slot-scope="scope">
<el-select v-model="serverId" placeholder="请选择">
<el-option
v-for="item in scope.row.servers"
:key="item.serverId"
:label="item.name"
:value="item.serverId"
/>
</el-select>
</template>
</el-table-column>
</el-table>
放在data()中的假数据:
tableData: [
{
name: "项目1",
servers: [
{ serverId: 1, name: "服务器1" },
{ serverId: 2, name: "服务器2" },
{ serverId: 3, name: "服务器3" },
],
},
{
name: "项目2",
servers: [
{ serverId: 7, name: "服务器4" },
{ serverId: 8, name: "服务器5" },
{ serverId: 9, name: "服务器6" },
],
},
{
name: "项目3",
servers: [
{ serverId: 4, name: "服务器7" },
{ serverId: 5, name: "服务器8" },
{ serverId: 6, name: "服务器9" },
],
},
],
但会导致莫名奇妙的问题,本来都是服务器的列表,如果在某一行选择一个服务器,其他行的值直接变成了数值!!!
用element-ui的选择器要想默认显示第一个值,v-model的值要与el-option中的:value的值相同。
如何定义这个v-model的值呢,这个值和其他行的还不能一样,还要实现和服务器的第一条数据的value值相同。
经过我苦苦冥想,想到一个方法就是将服务器的一条数据的id遍历到每行的数据列表中。
mounted(){
this.tableData.forEach(item=>{
item.serverOne=item.servers[0].serverId;
})
},
将列表的v-model=scope.row.serverOne
<el-table-column prop="servers" label="服务器列表">
<template slot-scope="scope">
<el-select v-model="scope.row.serverOne" placeholder="请选择">
<el-option
v-for="item in scope.row.servers"
:key="item.serverId"
:label="item.name"
:value="item.serverId"
/>
</el-select>
</template>
</el-table-column>
此时已经可以默认显示第一个值了
但是又出现一个问题,当我在某一行选择服务器的时候,不能选择(最后发现是不能实时更新列表的label值,只有当你用数据点其他行时,服务列表的值才能更新)
发现问题之后,开始找资料,最后知道改变数组可以触发视图更新的方法:
这些方法的作用我就不一一列举了,我只用了两个:插入方法push()和删除末尾方法pop()
<el-table-column prop="servers" label="服务器列表">
<template slot-scope="scope">
<el-select
v-model="scope.row.serverOne"
placeholder="请选择"
@change="updateTable()"
>
<el-option
v-for="item in scope.row.servers"
:key="item.serverId"
:label="item.name"
:value="item.serverId"
/>
</el-select>
</template>
</el-table-column>
方法:
updateTable() {
this.tableData.push("");
this.tableData.pop();
},
到此实现下拉列表实现默认显示且可选择
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_44932487/article/details/114041935
内容来源于网络,如有侵权,请联系作者删除!