当前位置:首页 > 前端

关于vue2中data值为不定长对象动态更改页面不生效的终极解决方案

Z先生4年前 (2021-12-14)前端1012

问题描述

子组件,定义了空data值,通过参数传递过来,通过watch修改,页面不更新,日志输出确定内容已经改过来。

已经测试方案

找了很多方案,this.$forceUpdate()this.$nextTick().then(() =>{})setTimeout深度克隆this.$set()均无效

终极解决方案

这里只展示脚本部分

<script>
  export default {
    components: {},
    props: {
      show: {
        type: Boolean,
        default: false,
      },
      data: {
        type: Object,
        default: null,
      },
    },
    data() {
      return {
        formData: {},
        rowData: {},
        drawerShow: false,
        confirmLoading: false,
      }
    },
    computed: {
      tmpData: {
        get: function () {
          let configData = this.data.config
          let fromData = { ident: this.data.ident }
          fromData = Object.assign({}, fromData, configData)
          return fromData
        },
        set: function (value) {
          this.fromData = value
        },
      },
    },
    watch: {
      tmpData(val) {
        this.formData = val
      },
      data(val) {
        this.rowData = val
      },
      show(val) {
        this.drawerShow = val
      },
    },
    beforeCreate() {
    },
    created() {},
    mounted() {
    },
    methods: {
      drawerClose() {
          //父组件要通过 :show.sync调用才生效
        this.$emit('update:show', false) //自定义事件会告诉父组件将父组件的 show值改为false,并传回给子组件。
      },
      clickSubmit() {

      }

      clickCancel() {
        this.drawerClose()
        this.$emit('cancel')
      },
    },
  }
</script>

代码解析:页面上用到的是formData,直接通过watch中的data监听修改formData无效,所以在computed中,加入了tmpData作为中间值,然后在watch中监听tmpData的变化,将变化值交给formData,然后就没问题了。

分享给朋友:

相关文章

npm如何使用国内镜像源?

通过命令配置1. 命令淘宝源npm config set registry https://registry.npmmirror.com腾讯源npm …

【原创】api接口模拟器(NodeJS版)

最近遇到一个项目,内网的APP,后端数据和前段开发属于异地,没法直接做接口数据测试。因此用NodeJs简单写了个API模拟器,只要将响应的数据放在对应目录下json.json文件中即可。请求地址全静态…

ColorUI色系

ColorUI色系

                          …

js获取指定文件的路径

获取指定js文件的路径var src = '/static/js/demo.js'; var path = src.sub…

巨坑:API在某些情况下POST请求会自动变成GET的解决方案

这个问题我已经不是第一次遇到了。之前没有收集整理,一般情况下,出现这种情况,都是有2次请求,一次301,在一次200,然后post就变成了get。一般出现这个情况,API接口和?之间不是反斜杠,导致3…

截至2020年6月PC显示器分辨率占比

截至2020年6月PC显示器分辨率占比

做一个项目汇报,需要用到这个数据;首先想到的数据源是cnzz的统计,去看了半天,没有抽这个数据层面出来。然后又去找51la,很可惜没有类似的大数据报告;又去百度统计里面,看到有这个数据,但是比较抽象,…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。