首页IT科技springboot框架和vue框架一样吗([Vue warn]: Error in v-on handler: “TypeError: Cannot read properties of undefined (reading ‘$refs‘))

springboot框架和vue框架一样吗([Vue warn]: Error in v-on handler: “TypeError: Cannot read properties of undefined (reading ‘$refs‘))

时间2025-06-20 03:40:07分类IT科技浏览5582
导读:报错:...

报错:

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

 背景:1.在做vue项目时             ,在功能弹框中                        ,想实现新增内容             。

             2. 报错原因是要触发menuCheckall组件后        ,才可以提交         ,因为不触发menuCheckall的时候dom未加载                       ,没有编译渲染进dom里面                        。

1.使用了

this.form.menuIds = this.$refs.menuCheckall.$refs.tree.getCheckedKeys();

其中menuCheckall是子组件        。

this.$refs[form].validate((valid) => { if (valid) { this.form.menuIds = this.$refs.menuCheckall.$refs.tree.getCheckedKeys(); addOrUpdateRole(this.form).then((res) => { console.log(res); if (res.code == 0) { this.$message.success(提交成功); this.dialogShow = false; this.$emit(call-back); } else { this.$message.error(res.message); } }); } });

2.但是报错了            ,原因是:

mouted加载数据以后      ,隐藏的弹出框并没有编译渲染进dom里面         。所以click弹出的时候$refs并没有获取到dom元素导致  undefined                       。

对话是一个虚拟dom,visible!==true之前                      ,dom未挂载在根节点上                ,导致无法识别            。

3.解决办法:

在网上查了一些解决方法   ,大致有三种:

1)$nextTick dom下一次更新之后

this.$nextTick(()=>{ this.form.menuIds = this.$refs.menuCheckall.$refs.tree.getCheckedKeys(); })

 这种方法虽然可以提交成功                     ,但是还是会报错      。

 2)如果是第一次就点击新增就没必要reset, 根据元素undefined判断

                if (this.$refs.menuCheckall.$refs.tree.getCheckedKeys() !== undefined) {

                    this.form.menuIds =this.$refs.menuCheckall.$refs.tree.getCheckedKeys();

                } 

此种方法仍报错也不可提交                    ,不适用于我的情况                      。

3)在方法前加了关键字async

这个我没有试

4)最后发现,问题在v-if

改为v-show即可

原因:

v-show作用:当用v-show来隐藏元素时                 ,只会在初次加载时渲染此dom节点                        ,之后都是通用display来控制显隐    ,如果此时使用v-if             ,那会频繁的操作dom                        ,会极大的影响性能        ,但用display则不会

而v-if作用:当用v-if来隐藏元素时         ,初次加载时就不用渲染此dom节点                       ,提升页面加载速度

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
电脑qq怎么查看我看过谁的空间(教你2个技巧轻松查看PC版QQ对方有没有删除你) 广州seo关键字优化(广州seo提升的诀窍)