【vue】在父组件created中$refs调用子组件内方法问题报错

写项目遇到一个问题,关于父子组件间的ref调用问题。

问题展示:
父组件中import引入了子组件,并且在components中注册了,但是使用this.$refs.xxx.initData()方法调用时报错。 打印显示 this.$refs.xxx 为 undefined。

父组件:

<category-liner ref="profit" />

<script>
import categoryLiner from '@/components/crm/categoryLiner'
export default {
    components: { categoryLiner },
    data() {},
    created() { this.init() },
    methods: {
        init() {
            this.$refs.profit.initData()
            console.log('refs', this.$refs.profit)  // 结果:undefined
        }
    }
}
</script>

此处F12显示this.$refs.profit.initData()报错,表示没有initData()这个方法。
打印出来的结果为undefined。
因为this.$refs.profit为undefined,所以肯定没有内部方法initData()

解决方案:
类似在父组件中created()、mounted()中生命周期运行在子组件生成前的钩子函数中去refs调用子组件的方法。必须用

this.$nextTick(()=>{ this.$refs.xxx.function() })

方式,利用nextTick包含调用方法保证子组件加载完毕后才可以调用。
同样适用于v-if类的情景。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值