当前位置: 首页 > 知识库问答 >
问题:

javascript - vue el-table 内嵌套 select 遇到问题?

郝永思
2023-11-30

如下代码我在el-table里面嵌套了一个select:

<template v-slot:is_finished="{ row }">          <el-select v-model="row.is_finished" placeholder="请选择" @change="handleGetFinished" :disabled="row.is_finished == 2">            <el-option              v-for="item in finishOptions"              :key="item.value"              :label="item.label"              :value="item.value">            </el-option>          </el-select>      </template>

我们的要求是选择了“是”后,点击保存,刷新表格数据后选择了“是”的,要禁用select,和提交按钮。

我是怎么做的呢,首次进入页面根据后端接口返回的数据控制禁用:disabled="row.is_finished == 2";

提交数据的时候需要获取选项的这个值,于是select使用change事件,但是,我选择后就直接改掉了行row.is_finished的值,直接禁用了,而且提交按钮也给禁用了,如下图:
image.png

怎么样才能不影响select选择和按钮提交?

共有2个答案

章乐逸
2023-11-30
<template>  <el-table :data="tableData">    <el-table-column prop="name" label="姓名"></el-table-column>    <el-table-column label="完成状态">      <template v-slot="{ row }">        <el-select          v-model="row.is_finished"          placeholder="请选择"          @change="handleSelectChange(row)"          :disabled="row.disableSelect">          <el-option            v-for="item in finishOptions"            :key="item.value"            :label="item.label"            :value="item.value">          </el-option>        </el-select>      </template>    </el-table-column>  </el-table>  <el-button    :disabled="isSubmitDisabled"    @click="handleSubmit">    提交  </el-button></template><script>export default {  data() {    return {      tableData: [                { name: '张三', is_finished: 0, disableSelect: false },        { name: '李四', is_finished: 2, disableSelect: true }      ],      finishOptions: [        { label: '否', value: 0 },        { label: '是', value: 1 },        { label: '已处理', value: 2 }      ],      isSubmitDisabled: false     };  },  methods: {    handleSelectChange(row) {      if (row.is_finished === 2) {        row.disableSelect = true;        this.isSubmitDisabled = true;       }          },    handleSubmit() {       console.log('提交数据');      this.refreshTableData();    },    refreshTableData() {      this.tableData.forEach(row => {        if (row.is_finished === 2) {          row.disableSelect = true;        }      });    }  }};</script>
索吕恭
2023-11-30

这个问题似乎是由于您在选择后直接更改了row.is_finished的值,导致select和提交按钮都被禁用了。如果您希望在选择后仅更改select的禁用状态,而不影响其他操作,您可以尝试将v-model绑定到不同的数据属性上,而不是直接绑定到row.is_finished

以下是一个可能的解决方案:

<template v-slot:is_finished="{ row }">  <el-select v-model="isSelected" placeholder="请选择" @change="handleGetFinished" :disabled="row.is_finished == 2">    <el-option      v-for="item in finishOptions"      :key="item.value"      :label="item.label"      :value="item.value">    </el-option>  </el-select></template>

在上面的代码中,我将v-model绑定到isSelected而不是row.is_finished。然后,您可以在handleGetFinished方法中获取选中的值,并根据需要更新其他数据属性或执行其他操作。

在提交数据时,您可以使用isSelected的值来决定是否禁用提交按钮或其他相关操作。例如,您可以根据isSelected的值来禁用提交按钮:

<template>  <el-button :disabled="isSelected == null || isSelected == 2">提交</el-button></template>

通过将v-model绑定到不同的数据属性上,您可以更好地控制各个组件的状态,并避免不必要的相互影响。

 类似资料:
  • el-table 中实现表格可编辑,使用el-table中的cell-mouse-enter和cell-mouse-leave来做触发事件,当可编辑里面嵌入的是el-select时,点击想选择选项,单元格移出去选择,选项就跑走了。el-select中的选择框和下拉框是否不是一体的?用select就可以选择。 把el-select中的选择框和下拉款之间的间距调整为紧贴,但还是鼠标一到下拉框就跑走了。

  • 这是写的布局 这是样式 图表和排行的高度 xl屏幕下的响应式效果 可以看到分为左右两列, 左列有2行2列, 右列有1行1列 md屏幕下因为charts图表不能太窄,所以做了个占满一行,这样就会导致1 2 行的高度加起来正好等于右列排行的高度, 3 4图表就掉下去了, 可以让3 4 图表跨row占满右边排行col占的列吗? 我有想过用屏幕监听,去动态设置排行的高度, 但是那样实在太长..

  • 本文向大家介绍vue el-table实现行内编辑功能,包括了vue el-table实现行内编辑功能的使用技巧和注意事项,需要的朋友参考一下 最近做一个vue前后端分离的项目,前端框架用element ui,在 使用 el-table 的过程中,需要实现行内编辑,效果大概是这样: 分为下面几个步骤: (1) 自定义 el-table 的表头(即添加 “新增” 按钮): 表头自定义了一个“添加”按

  • 问题内容: 为什么以下SQL语句不起作用? 它产生此错误: 查询输入必须至少包含一个表或查询。 单个语句有效。 问题答案: Access SQL语句不会让您对以下其中一项使用子查询 按照Piotr的建议,切换到语句即可。 或者,您可以在语句中使用Access Domain Aggregate函数而不是子查询:

  • 要求el-input输入的值是数字数组形式:[123,123],组件定义的value是string类型,所以在查询的时候需要对input输入的值进行转换。 我的处理方式: handleFormFormat方法是处理动态表单数据格式化的: 什么条件不输的时候查出的结果打印: 输入数字后查询打印结构(显示数据处理过后的): 但是network传的值却没有改变,还是字符串形式的: 求助大佬提点一下,哪里

  • 问题内容: 给出以下代码: 我得到以下输出: 因此,出于某种原因,密钥是试图取消对整个结构的编组,而不是仅仅应该解组。我做错了吗,或者这是json编码器中的错误?顺便说一句,正在进行1.2。 问题答案: 为什么最后没有结果 这不是解码器中的错误,而是代码中的错误。你只是将另一个地址为本地指针在。更正的代码: 语义:将地址分配给。这类似于。 的语义:将所有内容复制到指向的地方。 这项工作的一项要求是