vue中data变量数据更新了但是template页面未更新无重新渲染

17 篇文章 0 订阅

一、前记

一看到这个标题,大家肯定就会往vue数据更新页面却没有更新的那几种情况去想。但是本篇遇到的问题用那些方法都没法解决,如果大家是需要了解$set$forceUpdatesplice怎么更新页面重新渲染的可以另外去搜索相关知识点。

二、问题

1、父弹窗点击添加按钮

el-dialog弹窗中点击有一个【添加】按钮和添加好数据的列表,代码如下所示:

<template>
  <el-dialog title="父弹窗" :close-on-click-modal="false">
    <el-button icon="el-icon-plus" @click="add">添加</el-button>
    <div class="select-item" v-for="(item, index) in _value" :key="`relate_process_${index}`" @click="detail(index)">
      <i class="el-icon-connection" />
      <span class="select-title">标题</span>
      <span class="select-status">状态</span>
    </div>
    <child-dialog ref="childDialog" @submit="handleTable" />
  </el-dialog>
</template>

<script>
import ChildDialog from "./childDialog";

export default {
  name: "ParentDialog",
  components: {
    ChildDialog
  },
  data() {
    return {
      _value: []
    }
  },
  methods: {
    add() {
      this.$refs.childDialog.openTable()
    },
    handleTable(list) {
      this._value = [...this._value, ...list]
    }
  }
}
</script>

2、子弹窗待选择表格数据

点击【添加】按钮弹出新的el-dialog,里面有待选择的表格数据,代码如下所示:

<template>
  <el-dialog
	width="80vw"
	title="子弹窗"
	:destroy-on-close="true"
	:visible.sync="isVisible"
	:close-on-click-modal="false"
    :before-close="visible = false"
  >
    <!-- 表格选择的逻辑部分省略 -->
    <span slot="footer" class="dialog-footer">
      <el-button type="primary" @click="save">确 定</el-button>
    </span>
  </el-dialog>
</template>

<script>
export default {
  name: "childDialog",
  data () {
    return {
      list: [], // 已选的表格数据
      visible: false
    }
  },
  methods: {
    save() {
      this.$emit('submit', this.list)
    },
    openTable() {
      this.visible = true
    }
  }
}
</script>

3、父弹窗更新已选数据

子弹窗勾选好数据后,将数据回传给父弹窗,更新父弹窗的数据列表,正确呈现效果的应该如上图所示,但是实际却是下图所示:

可以看到我在页面上打印了勾选的数组的信息,但是底部列表数据没有渲染出来

三、解决

// 删除这行代码
:destroy-on-close="true"
// 新增下面这2行代码
:modal="false"
:append-to-body="false"

修改完子弹窗代码如下所示:

<template>
  <el-dialog
    width="80vw"
    title="子弹窗"
    :modal="false"
    :append-to-body="false"
    :visible.sync="visible"
    :close-on-click-modal='false'
    :before-close="visible = false"
  >
    <!-- 表格选择的逻辑部分省略 -->
    <span slot="footer" class="dialog-footer">
      <el-button type="primary" @click="save">确 定</el-button>
    </span>
  </el-dialog>
</template>

四、反思

真不知道为什么数据没有更新试图,跟修改弹窗是不是在body下还有关系,表示非常不能理解。如果有大佬知道为什么,可以授业解惑下…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小马甲丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值