Vue模板引用之ref特殊属性

1. 使用实例

<template>
  <input ref="input" name="我是input的name" />
  <br />
  <ul>
    <li v-for="arr in array" :key="arr" id="111" ref="itemRefs">{{arr}}</li>
  </ul>
</template>
<script setup>
import { ref, onMounted, watch, watchEffect, reactive } from "vue";

// 声明一个 ref 来存放该元素的引用
// 必须和模板里的 ref 同名
let input = ref(null);
let input1 = ref(null);

let array = ref([0, 1, 2, 3]);
//定义一个与li中ref值同名的响应式属性
let itemRefs=ref([])

//一定要在组件挂载后才能通过ref访问组件
onMounted(() => {
  input.value.focus();
});

//ref控件为单数时使用
watchEffect(() => {
  if (input.value) {
    input.value.focus();
    //获取控件的属性,比方说name需要用input.value
    console.log("ref绑定控件的name属性:", input.value.name);
  } else {
    // 此时还未挂载,或此元素已经被卸载(例如通过 v-if 控制)
  }
});

//ref与v-for进行结合获取dom元素为数组
watchEffect(() => {
  if (itemRefs.value) {
    //
    console.log("itemRefs:", itemRefs.value[0]);
  } else {
    // 此时还未挂载,或此元素已经被卸载(例如通过 v-if 控制)
  }
});
</script>


<style scoped>
</style>

在这里插入图片描述

2. 组件使用ref
父组件

<template>
  <classtest ref="child" />
</template>
<script setup>
import { ref, onMounted } from "vue";
import classtest from './components/classtest.vue'

// 声明一个 ref 来存放该元素的引用
// 必须和组件里的 ref 同名
let child  = ref(null);

//一定要在组件挂载后才能通过ref访问组件
onMounted(() => {
  console.log('子组件中X的值为:',child.value.x)
  console.log('子组件中y的值为:',child.value.y)
});
</script>


<style scoped>
</style>

子组件

<template>
  <div>{{x}}</div>
</template>

<script setup>
import {ref} from 'vue'
name:'classtest'
 let x=ref(1)
 let y=ref(2)

//应为使用了setup,使得组件默认为私有的
//如想获取组件内容,使用defineExpose 宏显式暴露
defineExpose({
  x,
  y
})
</script>

<style>

</style>

在这里插入图片描述

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值