关于this.$refs.xxx为undefined的问题

目录

1.问题描述

2.解决思路

3.测试结果

4.测试结果分析

5.解决方法

6.保留代码方便后续复制/粘贴


1.问题描述

2021年08月23日在开发的时候,遇见一个问题,我想获取<el-upload/>对象,然后把该对象的fileList属性置为空;

当我用console.log分别去打印this.$refs、this.$refs.querForm、this.$refs.querForm.uploadfile、this.$refs.uploadfile时却打印不同的结果:

this.$refs

VueComponent,包含uploadfile

this.$refs.querForm

VueComponent

this.$refs.querForm.uploadfile

undefined

this.$refs.uploadfile

undefined

结果如下图:

2.解决思路

既然涉及到$refs,那么我就在子组件、父组件中把生命周期回调函数都输出日志,我看看到底是什么情况?

3.测试结果

当我点击菜单时,打印的日志:

 当我点击【修改】按钮后,打印的日志:

4.测试结果分析

当父组件初始化的时候,<el-dialog/>并不会进行初始化,只有当<el-dialog/>要显示的时候,<el-dialog/>才会初始化,进而把<el-dialog/>所引用的子组件进行初始化,因此,在父组件的methods中调用this.$refs.XXX的时候,报undefined;

5.解决方法

<el-dialog/>有个【open】回调函数,通过这个回调函数来获取子组件;

6.保留代码方便后续复制/粘贴

beforeCreate() {

  console.log('XXXXXXXXXXXXXX--------------beforeCreate')

},

created() {

  console.log('XXXXXXXXXXXXXX--------------created')

},

beforeMount() {

  console.log('XXXXXXXXXXXXXX--------------beforeMount')

},

mounted() {

  console.log('XXXXXXXXXXXXXX--------------mounted')

},

beforeUpdate() {

  console.log('XXXXXXXXXXXXXX--------------beforeUpdate')

},

updated() {

  console.log('XXXXXXXXXXXXXX--------------updated')

},

beforeUnmount() {

  console.log('XXXXXXXXXXXXXX--------------beforeUnmount')

},

unmounted() {

  console.log('XXXXXXXXXXXXXX--------------unmounted')

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用uni-app时,有时候可能会遇到使用 `this.$refs.xxx` 获取元素时出现 `undefined` 的情况。这通常是因为在组件渲染完成之前,尝试访问 `this.$refs.xxx`。 为了解决这个问题,你可以尝试以下几种方法: 1. 使用 `$nextTick` 方法:在 `this.$nextTick` 回调函数中访问 `this.$refs.xxx`,确保组件已经完成渲染。示例代码如下: ```javascript this.$nextTick(() => { console.log(this.$refs.xxx); }); ``` 2. 使用 `v-if` 条件渲染:使用 `v-if` 条件渲染保证元素已经存在于 DOM 中后再访问。示例代码如下: ```html <template> <div v-if="showElement" ref="xxx">Element</div> </template> <script> export default { data() { return { showElement: false }; }, mounted() { // 在适当的时机设置 showElement 为 true this.showElement = true; console.log(this.$refs.xxx); } }; </script> ``` 3. 使用 `this.$nextTick` 结合 `v-if`:结合上述两种方法,使用 `this.$nextTick` 确保组件渲染完成后再访问 `this.$refs.xxx`。示例代码如下: ```html <template> <div v-if="showElement" ref="xxx">Element</div> </template> <script> export default { data() { return { showElement: false }; }, mounted() { this.$nextTick(() => { this.showElement = true; console.log(this.$refs.xxx); }); } }; </script> ``` 以上是几种解决 `this.$refs.xxx` 获取元素出现 `undefined` 的方法,你可以根据实际情况选择适合你的方法来解决问题。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值