嵌套多选下拉框可编辑el-table的使用

本文介绍了一个在Vue.js应用中使用ElementUI实现表格行内编辑,特别是涉及嵌套多选下拉框的需求。在处理后台返回的以逗号分隔的字符串数据时,需要前端自定义数组进行反显。问题在于反显后数据无法编辑或实时更新,原因在于未实现双向数据绑定。通过在组件上使用v-model解决了这个问题,实现细节和原因有待深入分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求为表格行内编辑,多选下拉

后台返回数据为,分割字符串,需前台自定义数组做反显,但是发现反显之后不可编辑或者编辑数据不会及时更新,是由于数据没有做双向数据的绑定,用this.$set加绑定,解决。现借此记录,具体实现原理和原因需具体分析。
代码如下


<div id="app">
  <template>
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="date" label="日期" width="180">
      </el-table-column>
      <el-table-column prop="name" label="姓名" width="180">
        <template slot-scope="scope">
          <el-select v-model="scope.row.nameList" multiple collapse-tags placeholder="请选择">
            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </template>
      </el-table-column>
      <el-table-column prop="address" label="地址">
      </el-table-column>
    </el-table>
  </template>
</div>


var Main = {
  data() {
    return {
      tableData: [
        {
          date: "2016-05-02",
          name: "选项1,选项2",
          address: "上海市普陀区金沙江路 1518 弄"
        },
        {
          date: "2016-05-04",
          name: "选项4,选项5",
          address: "上海市普陀区金沙江路 1517 弄"
        },
        {
          date: "2016-05-01",
          name: "选项1",
          address: "上海市普陀区金沙江路 1519 弄"
        },
        {
          date: "2016-05-03",
          name: "选项1",
          address: "上海市普陀区金沙江路 1516 弄"
        }
      ],
      options: [
        {
          value: "选项1",
          label: "黄金糕"
        },
        {
          value: "选项2",
          label: "双皮奶"
        },
        {
          value: "选项3",
          label: "蚵仔煎"
        },
        {
          value: "选项4",
          label: "龙须面"
        },
        {
          value: "选项5",
          label: "北京烤鸭"
        }
      ]
    };
  },
  created() {
    this.tableData.forEach((item) => {
      if (item.name) {
        this.$set(item, "nameList", item.name.split(","));
      } else {
        this.$set(item, "nameList", []);
      }
    });
  }
};
var Ctor = Vue.extend(Main);
new Ctor().$mount("#app");

感谢观看!标题表述不准确,翻到即是缘!

`el-autocomplete` 是 Element UI 中的一个组件,用于创建下拉搜索输入框,用户可以在其中输入文本,并在输入过程中从远程服务器动态加载建议结果。如果你希望在这个 `el-autocomplete` 组件内嵌入一个 `el-table` 组件,通常是为了展示更详细的数据,或者将搜索结果进一步细分显示。 ### 实现步骤 为了在 `el-autocomplete` 的搜索结果区域嵌入一个 `el-table`,你可以按照以下几个步骤操作: #### 1. 数据准备 首先,你需要获取到一系列数据并将其存储在一个数组中,这将是 `el-table` 显示的内容源。 ```javascript const data = [ { id: 1, name: 'Item A', details: ['Detail 1A', 'Detail 2A'] }, { id: 2, name: 'Item B', details: ['Detail 1B', 'Detail 2B'] }, // 更数据... ]; ``` #### 2. 创建 `el-autocomplete` 和 `el-table` 然后,在 Vue 组件中设置相应的 HTML 结构,并通过 API 获取和展示数据: ```html <template> <div> <!-- el-autocomplete --> <el-autocomplete v-model="input" :fetch-suggestions="querySearch" placeholder="请输入内容搜索" @change="onChange" class="inline-input" ></el-autocomplete> <!-- el-table --> <el-table :data="tableData" style="width: 100%" > <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="名称"></el-table-column> <!-- 其他列... --> </el-table> </div> </template> <script> export default { data() { return { input: '', tableData: [], }; }, methods: { querySearch(queryString, cb) { const results = this.data.filter(item => item.name.toLowerCase().indexOf(queryString.toLowerCase()) > -1); cb(results); }, onChange(value) { // 这里可以处理输入值改变后的逻辑,例如更新 `tableData` // ... } }, }; </script> ``` #### 3. 更新 `el-table` 数据 在 `onChange` 方法中可以根据用户的输入查询条件动态地更新 `tableData` 数组,以便只显示符合条件的结果。 #### 4. 配置样式 你可以根据需要调整这两个元素的样式,比如给它们添加合适的 CSS 类名。 ### 相关问题: 1. **如何优化搜索性能**? 使用异步查询而不是同步查询可以提高性能。 2. **如何处理复杂的表格数据**? 如果数据结构复杂,可以考虑引入额外的计算或过滤逻辑来简化展示。 3. **如何实现实时刷新表格**? 当数据源变化时,需要更新 `tableData` 来反映最新的信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值