elementui table slot-scope="scope"值不能更新的问题

发布于 2022-09-11 20:40:11 字数 2961 浏览 8 评论 0

题目描述

需求是一个表格里的span标签,点击编辑按钮后input显示,具体请看代码跟注释,谢谢了

效果类似这样

clipboard.png

相关代码 这个页面逻辑多 我摘出了一些代码 可能不全 但是问题就是这个问题,请看代码注释

// 请把代码文本粘贴到下方(请勿用图片代替代码)

<template>
    <el-dialog :title="`用户[${iprow.name}]对应IP`" :visible.sync="show" :before-close="handleCancel">
      <template v-if="ipData.length">
        <el-form>
          <el-table
            :data="ipData"
            style="width: 100%"
          >
            <el-table-column v-for="(v,i) in columns" :key="i" :label="v.title" :prop="v.field">
              <template slot-scope="scope">
                <span>{{ scope.row.isEdit }}</span>
                <span v-if="scope.row.isEdit">
                  <el-input v-model="sel[v.field]" size="mini" placeholder="请输入内容" />
                </span>
                <span v-else>{{ scope.row[v.field] }}</span>
              </template>
            </el-table-column>
            <el-table-column
              align="right"
            >
              <template slot-scope="scope">
                <el-button
                  size="small"
                  type="text"
                  @click="submitForm(scope.$index, scope.row, true)"
                > {{ scope.row.isEdit ? '保存' : '编辑' }} </el-button>
                <el-button
                  v-if="scope.row.isEdit"
                  size="small"
                  type="text"
                  @click="submitForm(scope.$index, scope.row, false)"
                >取消</el-button>
                <el-button
                  v-if="!scope.row.isEdit"
                  size="small"
                  type="text"
                  @click="handleDelete(scope.$index, scope.row, false)"
                >删除</el-button>
              </template>
            </el-table-column>
          </el-table>
        </el-form>
      </template>
      <el-row><el-button type="primary" @click="handleAdd">新增</el-button></el-row>
    </el-dialog>
    <template>
    export default {
        mounted() {
            this.$nextTick(() => {
              this.getIpList()
            })
        },
        methods:{
        // 这里获取到数据之后我给数据里添加了isEdit赋值为flase
        // 所以模板里会显示 span 标签
            getIpList() {
              fetchAppointList({ id: this.iprow.id }).then(res => {
                this.ipData = res.data
                this.ipData.forEach(item => {
                  item.isEdit = false
                })
              })
            },
            // 我点击后把isEdit改为true了,应该是显示input 但是我发现表格里的isEdit并未改变
            submitForm(index, row, isInput) {
              console.log(row)
              row.isEdit = true
          })
    }
}

求指教

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

揽清风入怀 2022-09-18 20:40:11
this.ipData = res.data
this.ipData.forEach(item => {
  item.isEdit = false
})

这里顺序有问题,先赋值就是先监听,vue中直接为监听的对象新增一个属性,这个属性是不会被监听的,这时候需要用set处理。所以你这里对象的isEdit属性并没有被监听到,也就不会更新了。你这里不需要使用set,把下面的循环改下就可以了

this.ipData = res.data.map(item => {
  item.isEdit = false
  return item
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文