快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → Vue3中如何使用ref获取元素节点全面解析

Vue3中如何使用ref获取元素节点全面解析

时间:2022-09-29 13:36:09人气:作者:快盘下载我要评论

Vue2 中的 ref

<template>
  <div id=;app;>
    <div ref=;hello;>小猪课堂</div>
  </div>
</template>
<script>
export default {
  mounted() {
    console.log(this.$refs.hello); // <div>小猪课堂</div>
  },
};
</script>

Vue3 中 ref 访问元素

<template>
  <div ref=;hello;>小猪课堂</div>
</template>
<script setup lang=;ts;>
import { onMounted, ref } from ;vue;;
const hello = ref<any>(null);
onMounted(() => {
  console.log(hello.value); // <div>小猪课堂</div>
});
</script>

运行结果;
Vue3中如何使用ref获取元素节点全面解析
注意点;
1.变量名称必须要与 ref 命名的属性名称一致。
2.通过 hello.value 的形式获取 DOM 元素。
3.必须要在 DOM 渲染完成后才可以获取 hello.value;否则就是 null。

v-for 中使用 ref

<template>
  <div ref=;hello;>小猪课堂</div>
  <ul>
    <li v-for=;item in 10; ref=;itemRefs;>
      {{item}} - 小猪课堂
    </li>
  </ul>
</template>
<script setup lang=;ts;>
import { onMounted, ref } from ;vue;;


const itemRefs = ref<any>([]);
onMounted(() => {
  console.log(itemRefs.value);
});
</script>

运行的结果;
注意点;我们似乎没办法区分哪个 li 标签哪个 ref;除此之外;我们的 itemRefs 数组不能够保证与原数组顺序相同;即与 list 原数组中的元素一一对应。

:ref 绑定函数
ref 属性接收的是一个 setHelloRef 函数;该函数会默认接收一个 el 参数;这个参数就是我们需要获取的 div 元素。假如需求中我们采用这种方式的话;那么完全可以把 el 保存到一个变量中去;供后面使用。

<template> 
  <div :ref=;setHelloRef;>小猪课堂</div>
</template>
<script setup lang=;ts;>
import { ComponentPublicInstance, HTMLAttributes } from ;vue;;


const setHelloRef = (el: HTMLElement | ComponentPublicInstance | HTMLAttributes) => {
  console.log(el); // <div>小猪课堂</div>
};
</script>

v-for的更改后使用;方法1

<template>
  <ul>
    <li v-for=;item in 10; :ref=;(el) => setItemRefs(el, item);>
      {{ item }} - 小猪课堂
    </li>
  </ul>
</template>
<script setup lang=;ts;>
import { ComponentPublicInstance, HTMLAttributes, onMounted } from ;vue;;
let itemRefs: Array<any> = [];
const setItemRefs = (el: HTMLElement | ComponentPublicInstance | HTMLAttributes, item:number) => {
  if(el) {
    itemRefs.push({
      id: item,
      el,
    });
  }
}
onMounted(() => {
  console.log(itemRefs);
});
</script>

运行的结果;
Vue3中如何使用ref获取元素节点全面解析
这种形式既让我们的操作性变得更大;还解决了 v-for 循环是 ref 数组与原数组顺序不对应的问题。

v-for的更改后使用;方法2

<template>
   <div ref=;getDivDom; v-for=;item in list; :data-id=;item.id;></div> 
</template>
<script setup>
import { ref} from ;vue;
const divDomList = ref(new Map());

const getDivDom = el=>{
    if(el){
        divDomList.set(el.dataset[;id;],el) 
    }
}

// const el =divDomList.get(id) // 根据list数据中的id值 获取对应的dom元素 

组件上使用 ref

<template>
  <child ref=;childRef;></child>
</template>
<script setup lang=;ts;>
import { onMounted, ref } from ;vue;;
import child from ;./child.vue;;
const childRef = ref<any>(null);
onMounted(() => {
  console.log(childRef.value); // child 组件实例
  console.log(childRef.value.message); // undefined
});
</script>
<template>
  <div>{{ message }}</div>
</template>
<script lang=;ts; setup>
import { ref } from ;vue;;
const message = ref<string>(;我是子组件;);
const onChange = () => {};
</script>

运行的结果
Vue3中如何使用ref获取元素节点全面解析

childRef.value.message 为 undefined;这也是与 Vue2 的不同之处。在 Vue3 中;使用 ref 获取子组件时;如果想要获取子组件的数据或者方法;子组件可以通过defineExpose 方法暴露数据。

改进组件上使用 ref的写法
修改子组件代码;

<template>
  <div>{{ message }}</div>
</template>
<script lang=;ts; setup>
import { ref } from ;vue;;


const message = ref<string>(;我是子组件;);
const onChange = () => {
  console.log(;我是子组件方法;)
};
defineExpose({
  message,
  onChange
});
</script>

父组件再次获取;

const childRef = ref<any>(null);
onMounted(() => {
  console.log(childRef.value); // child 组件实例
  console.log(childRef.value.message); // 我是子组件
  childRef.value.onChange(); // 我是子组件方法
});

运行的结果;
Vue3中如何使用ref获取元素节点全面解析

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。