Vue this.$refs的使用

原文链接:https://blog.csdn.net/qq_37767455/article/details/102485242

案例一、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>

Vue 3 中,`this.$refs` 是一个特殊的属性,它提供了一种直接访问组件实例中 DOM 元素的方式。当在模板中使用 `ref` 属性绑定一个元素时,Vue 会将这个引用存储在 `$refs` 对象中,让你可以在任何时候通过组件实例访问到那个元素。 以下是如何在 Vue 3 中使用 `this.$refs` 的基本步骤: 1. **定义 ref**: 在你的模板(`.vue` 文件的 template 部分)中,为需要引用的元素添加 `ref` 属性,例如 `<div ref="myRef"></div>`。 2. **获取引用**: 在组件的 `setup` 函数或 methods 中,你可以通过 `this.$refs` 访问到这个元素。例如: ```javascript export default { setup() { const myRef = ref(null); // 创建一个响应式的 ref 变量来保存引用 onMounted(() => { // 当组件已挂载,你可以获取到 DOM 元素 const domElement = this.$refs.myRef; if (domElement) { console.log('DOM element:', domElement); } }); // 或者在事件处理器中使用 function handleClick() { if (myRef.value) { myRef.value.style.backgroundColor = 'red'; } } return { handleClick, myRef }; } } ``` 3. **使用**: 在事件处理函数或生命周期钩子(如 `onMounted`、`onUpdated` 等)中,你可以直接操作 `this.$refs.myRef` 的属性或方法。 **相关问题--:** 1. Vue 3 中的 `ref` 是什么时候初始化的? 2. 如何在 Vue 3 的自定义事件中使用 `$refs`? 3. `$refs` 是否仅在组件挂载后可用?如果组件被卸载,还能保持引用吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值