优秀的编程知识分享平台

网站首页 > 技术文章 正文

Vue3-笔记九(模板引用)(vue使用模板)

nanyue 2024-09-10 16:07:03 技术文章 5 ℃

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

<template>
  <input ref="input" />
</template>
<script setup>
import { ref, onMounted } from 'vue'
// 声明一个 ref 来存放该元素的引用
// 必须和模板里的 ref 同名
const input = ref(null)
onMounted(() => {
  input.value.focus()
})
</script>

**只可以在组件挂载后才能访问模板引用**

v-for中的使用

需要v3.2.25及以上版本

<template>
  <ul>
    <li v-for="item in list" ref="itemRefs">
      {{ item }}
    </li>
  </ul>
</template>
<script setup>
import { ref, onMounted } from 'vue'
const list = ref([
  /* ... */
])
const itemRefs = ref([])
onMounted(() => console.log(itemRefs.value))
</script>

组件上的使用:

假设已经了解组件相关知识

//父组件
<template>
  <Child ref="child" />
</template>
<script setup>
import { ref, onMounted } from 'vue'
import Child from './Child.vue'
const child = ref(null)
onMounted(() => {
  // child.value 是 <Child /> 组件的实例
})
</script>
//子组件
<script setup>
import { ref } from 'vue'
const a = 1
const b = ref(2)
// 像 defineExpose 这样的编译器宏不需要导入
defineExpose({
  a,
  b
})
</script>

**setup语法糖中,父组件无法直接访问使用了setup语法糖的任何东西,除非子组件在其中通过 defineExpose 宏显式暴露**

Tags:

最近发表
标签列表