vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue this.refs为空出现原因分析

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>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文