• VUE+Element首次打开Dialog加载子组件数据未渲染(不显示)


    第一次打开弹窗组件时,父组件传给子组件的数据在视图中未显示,第二次以后再打开就可以显示

    
    
      
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    原因一:当弹窗组件里面包裹子组件时候,第一次渲染子组件数据未渲染,子组件接收到的是undifined

    解决方法:在弹窗为true后用this.$nextTick来更新

    this.fromDialogVisible = true;
    this.$nextTick(() => {
      (this as any).$refs.clickResetForm.resetForm();
      this.valueForm = this.formData;
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    PS:在检查代码的时候可能你会发现自己已经用上了this. n e x t T i c k 还 是 不 行 , 请 检 查 使 用 t h i s . nextTick还是不行,请检查使用this. nextTick使this.nextTick的位置,有可能是在弹窗为true前用的this.$nextTick

    原因二:当弹窗组件里面包裹子组件时候,第一次渲染子组件数据未渲染,子组件组件已经接收到了数据,但依然未显示,接收到数据未渲染到视图(数据动态变化的,可能是因为数据在变化后未进行双向绑定或者父组件传给子组件的数据未赋值给子组件双向绑定的数据源)

    解决办法:在子组件中使用$watch()监听父组件传给子组件的数据一旦发生变化,就调用引号里的方法,从而达到change事件监听的效果,在监听到数据变化时进行数据赋值(双向绑定)或者其他动作

    watch是一个对象,按照对象的键值对格式要使用

    watch的三个对象

    • handler:其值是一个回调函数。即监听到变化时应该执行的函数。
    • deep:其值是true或false;确认是否深入监听。(一般监听时是不能监听到对象属性值的变化的,数组的值变化可以听到。)
    • immediate:其值是true或false;确认是否以当前的初始值执行handler的函数。

    子组件代码示例:

    
      
      ...
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    export default {
      name: "formModule",
      props: [
        "valueForm",
      ],
      data() {
        return {
          form: {},
        };
      },
      watch: {
        valueForm: {
          handler() {
              this.form = this.valueForm;
          },
          immediate: true,//立即执行
          },
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    数据库访问-records库
    第P9周-YOLOv5Backbone模块
    处理机调度
    【云原生-Docker篇】之 Docker Registry的搭建与使用
    MySQL 连接查询和存储过程
    Git --》Git与GitHub操作
    2022腾讯全球数字生态大会【存储专场】它来了|预约有礼
    vue3+vite+jest配置 单元测试总结
    冰冰学习笔记:Linux下的权限理解
    如何确保多系统集成的成功发布
  • 原文地址:https://blog.csdn.net/weixin_44542088/article/details/127886602