当前位置: 代码网 > it编程>前端脚本>Vue.js > vue中this.$refs有值,但无法获取ref的值问题及解决

vue中this.$refs有值,但无法获取ref的值问题及解决

2024年05月18日 Vue.js 我要评论
vue中this.$refs有值,但无法获取ref的值vue报错cannot read property ‘addeventlistener’ of null"解决方

vue中this.$refs有值,但无法获取ref的值

vue报错cannot read property ‘addeventlistener’ of null"

在这里插入图片描述

解决方法

查看当前div或者父级div是否存在v-if,如果存在,请改为 v-show

ant-design-vue中this.$refs使用笔记

笔者是后端开发,因为工作需要开始接触前端的一些东西,边学习边总结,如有描述错误的地方还请大家多多指教。

关于 ref 的用法,个人理解它像是简洁版的通过id获取控件元素的工具,其本意就是将拥有该属性的控件注册到父元素上进行统一管理。

下面用几个例子具体看下。

           <a-col :span="6">
			   <a-form-item label="测试控件a">
				   <dicselect allowclear dictype="group_role_type" v-decorator="['a']"  @select="selectdemo" />
			   </a-form-item>
		   </a-col>
			<a-col :span="6">
            	<a-form-item label="测试控件b" >
	                <dicselect dictype="group_role_type" ref="reftest1" :allowclear="true" v-decorator="['b']"/>
                </a-form-item>
			</a-col>
			<a-col :span="6">
            	<a-form-item label="测试控件c" >
					<a-input type="text" ref="reftest2" v-decorator="['c']"/>
				</a-form-item>
          </a-col>

首先做了三个控件,其中两个是双击下拉a和b,key-value码值为:[{"01":"组长"},{"02":"副组长"},{"03":"组员"}]。

最后一个是文本框c。然后我们再b和c上分别加上了ref属性,分别标记为reftest1和reftest2,在a控件上增加选定触发的函数selectdemo。

下面开始编辑函数内容:

selectdemo (value) {
			if (value === '01') {
				this.$refs.reftest1.disableditem(['02', '03'])
				this.$refs.reftest2.value = "已选择01,02、03失效"
			} else if (value === '02') {
				this.$refs.reftest1.disableditem(['01', '03'])
				this.$refs.reftest2.value = "已选择02,01、03失效"
			} else if (value === '03') {
				this.$refs.reftest1.disableditem(['01', '02'])
				this.$refs.reftest2.value = "已选择03,01、02失效"
			} else {
				this.$refs.reftest1.disableditem([])
				this.$refs.reftest2.value = "已选择04,无限制"
			}
		}

函数内容很简单,根据a控件选择内容,控制b控件可选内容,并且在c控件上展示具体提示,接下来我们看具体效果。

当我们选定控件a为组长时,根据上述js逻辑会将控件b的02、03码值置为失效不可用,仅让选择01,并且在控件c展示文本说明。实际效果和我们预想一致。

关于利用ref赋值早有很多前辈进行介绍,笔者主要说一下  this.$refs.reftest1.disableditem(['02', '03'])  的用法,工作中还是经常见到这样的场景,只不过我们都用了别的方式去实现,要么隐藏,要么替换码值类型等等,个人认为这样的用法更贴近用户,操作起来更容易理解其业务背景。

对于文章开头我理解的ref是将子元素注册到父元素的说法也在这里有验证,在操作为控件c赋值时,控制台会有错误提醒:

avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. instead, use a data or computed property based on the prop's value. prop being mutated: "value"

大体意思是:避免直接改变属性值,因为每当父组件重新渲染时,该值将被覆盖。

也就是说直接赋值可能会导致属性值被覆盖的问题,很可能酿造一桩新的 “ web悬案 ” ,大家在具体使用的时候要多多留意。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com