关于vue2中父子组件动态传值的总结

  • 需求: 父组件通过一个下拉框控制传递不同的数据给子组件(父组件使用Object.assign()重新定义一个新的对象),子组件负责渲染最新的数据

  • 问题: 子组件数据获取最新,但视图变化顺序不对,总是渲染之前的数据

    // 父组件
    mounted() {
       this.getInfo(参数)// 发送ajax请求获取带传递的prop
    }
    
    methods: {
    	getInfo(xx) {
    	 let obj = {....}
         this.myInfo = Object.assign(this.myInfo, obj)
    	},
    	change(val) {
    	   xxxxx;
    	   this.getInfo(xx)
    	}
    }
    
  • 解决方案:

    1. 使用watch监听props, change的时候子组件渲染有问题
       xxObj: {
          handler () { 
             this.handlexx()
          },
          deep: true,  // 可以深度检测到 obj 对象的属性值的变化
          immediate: true //刷新加载  立马触发一次handler
         }
      
    2. 使用this.$refs.xxName.getData(oo), 父调用子方法传值;change的时候子组件渲染有问题
         // 子组件
         getData(oo) {
           this.myData = oo;
           this.$nextTick(() => {
             this.xxx()
           })
         }
      
    3. 强制子组件渲染: 使用v-if,初始设置为false,当获取数据设置为true, change的时候先回归值为false (成功!!)
       < SonComponent  v-if="isShow"/>
         // v-if 是对dom的创建和删除,对于频繁切换不友好,如果需要频繁切换,不建议使用,建议下面一种
      
    4. 强制子组件渲染: 使用key属性 (简直了,一般数据渲染的时候用key,没想到还可以控制组件渲染!道理是相通的)
      		    < SonComponent   :key="myKey"/>
      		    // 设置动态key, 当数据成功获取时候,改变key让组件渲染,比如初始为key=0,接口成功后key++, change中都不需要修改了
      

— 其实,我也不是很明白为什么前两种不行,数据和视图显示不一致,望知道的大佬帮忙指导下!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值