12、Vue 3 (2024 版)基础笔记 - 模板引用获取 DOM 元素

作者: 温新

图书: 【Vue 3 setup 使用实记】

阅读: 69

时间: 2024-05-18 23:40:36

虽然 Vue 的声明性渲染模型为你抽象了大部分对 DOM 的直接操作,但在某些情况下,我们仍然需要直接访问底层 DOM 元素。要实现这一点,我们可以使用特殊的 ref attribute。

准备工作

1、创建组件

src/components/RefDemo.vue

<script setup lang="ts"></script>

<template></template>

2、引用组件

src/App.vue

<template>
    <RefDemo/>
</template>

<script setup lang="ts">
    import RefDemo from "@/components/RefDemo.vue";
</script>

访问模板引用

src/components/RefDemo.vue

<template>
    <p ref="nameRef">{{ name }}</p>
    <button @click="clickHandler">获取模板引用</button>
</template>

<script setup lang="ts">
    import { ref } from 'vue'

    // 创建响应式变量
    const name = ref('王美丽')
    // 此处,创建响应式数据用接收模板引用
    const nameRef = ref('')

    const clickHandler = () => {
        // 输出元素
        console.log(nameRef.value)
        // 通过 DOM 修改元素的值
        nameRef.value.innerHTML = '王丽丽'
    }
</script>

v-for 中的模板引用

当在 v-for 中使用模板引用时,对应的 ref 中包含的值是一个数组,它将在元素被挂载后包含对应整个列表的所有元素:

src/components/RefDemo.vue

<template>
    <ul>
        <li v-for="item in list" ref="itemRefs">
            {{ item }}
        </li>
    </ul>

    <button @click="clickHandler">获取</button>
</template>

<script setup>
    import { ref } from 'vue'

    const list = ref([1, 2, 3])

    const itemRefs = ref([])

    const clickHandler = () => {
        itemRefs.value.map(i => {
            console.log(i.textContent)
        })
    }
</script>
请登录后再评论