vue中关于this.refs为空出现原因及分析
作者:27℃凉白开
这篇文章主要介绍了vue中关于this.refs为空出现原因及分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
vue关于this.refs为空出现原因分析
场景
在使用vue过程中,本想调用子组件的数据,但尝试多次一直获取失败。
经过分析有以下原因
1、在生命周期mounted之前的钩子函数中去调用会获取不到,原因是DOM节点都没有生成。
2 、this.refs的组件在v-if为false的父节点下,导致这个子组件未渲染,所以获取不到。
注意
一定是组件已经渲染成功才能调用组件的数据。而不是页面加载完成后就一定能获取到
vue this.$refs的使用
案例一、ref 写在标签上时
<!-- ref 写在标签上时:this.$refs.名字 获取的是标签对应的dom元素 ref 写在组件上时:这时候获取到的是 子组件(比如counter)的引用--> <div id="root"> <!-- ref = 'hello': 给div 起了一个引用的名字 hello --> <div ref = 'hello' @click = "handleClick"> laugh yourself </div> </div> <script> var vm = new Vue({ el: '#root', methods: { handleClick: function() { //this.$refs : 获取整个Vue实例中所有的引用 然后再找到hello这个引用 指向div那个dom节点 //console.log(this.$refs.hello) alert(this.$refs.hello.innerHTML) } } }) </script>
案例二、 ref 写在组件上时
计数:
<!-- ref 写在标签上时:this.$refs.名字 获取的是标签对应的dom元素 ref 写在组件上时:这时候获取到的是 子组件(比如counter)的引用--> <div id="root"> <!-- 子组件触发了事件 这里父组件(模板区里面)监听该事件 调用handleChange方法 因此handleChange方法定义在父组件的methods里面--> <counter ref="one" @change="handleChange"></counter> <counter ref="two" @change="handleChange"></counter> <div>{{total}}</div> </div> <script> Vue.component('counter', { template: '<div @click="handleClick"> {{number}} </div>', data: function() { return { number: 0 } }, methods: { handleClick: function() { this.number ++ //子组件向父组件传值 子组件被点击的时候 number+1 同时告诉外面 也即是触发一个事件 this.$emit('change') } }, }) var vm = new Vue({ el: '#root', data: { total: 0 }, methods: { handleChange: function() { //在此方法中计算两个数量的和 通过this.$refs.引用名字 获取两个子组件的引用 this.total = this.$refs.one.number + this.$refs.two.number } } }) </script>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。