前端Vue父组件挂载子组件弹窗,父组件按钮点击无法开子组件弹窗解决方案

报错信息

Vue warn]: Error in v-on handler: "TypeError: Cannot read properties of undefined (reading 'shows')"

found in

---> <Index> at src/router/views/purchase-order-management/new/index.vue
       <App> at src/App.vue
         <Root>

在这里插入图片描述

父组件

html

<template #cell(order)="data">
<b-button variant="success" size="sm" @click="orderModal(data)">Order</b-button>
</template>

//挂载

<modalOrder
  ref="modalOrderComponent"
   :orderData="orderData"
   v-if="orderData.length > 0">
</modalOrder>

js

错误的写法
	data(){
	return{
	  orderData: []
	}
	}

        // 打开表格order弹窗
        orderModal(data) {
            // 得到每一行order的data数据
            console.log(data, '我是父组件单行数据');
            this.orderData.push(data);
            // 错误的写法
            this.$refs.modalOrderComponent.shows();
			// 下面这个正确写法
            // this.$nextTick(() => {
            //     this.$refs.modalOrderComponent.shows();
            // })
        },

解决

就是渲染期间无法找到子组件shows();的方法,我感觉应该是父组件已经加载完了,子组件方法还没有渲染,用这个this.$nextTick()声明周期,也就是说等父组件加载完后再执行这个shows(),就可以正常显示了

把父组件的js修改一下

修改父组件js

正确写法
	data(){
	return{
	  orderData: []
	}
	}

        // 打开表格order弹窗
        orderModal(data) {
            // 得到每一行order的data数据
            console.log(data, '我是父组件单行数据');
            this.orderData.push(data);
       
			// 下面这个正确写法
           this.$nextTick(() => {
             this.$refs.modalOrderComponent.shows();
           })
        },

子组件

子组件又挂载封装的弹窗调用绑定ref的infoModalDetails,封装弹窗组件

  methods: {
    shows() {
      this.$refs.infoModalDetails.show();
    },
   }

封装弹窗组件

show() {
   this.visible = true;
},

最后

感觉文章好的话记得点个心心和关注和收藏,有错的地方麻烦指正一下,如果需要转载,请标明出处,多谢!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值