vue3 ref如何獲取標(biāo)簽dom
概述

在 Vue 中使用 ref 的主要作用是允許你訪問和操作 DOM 元素或組件實例。ref 允許你在 Vue 組件中獲取對特定 DOM 元素或子組件實例的引用,以便可以進(jìn)行以下操作:
直接訪問和修改 DOM 元素的屬性和內(nèi)容:你可以使用 ref 來訪問和修改特定 DOM 元素的屬性、樣式、內(nèi)容等。這對于需要直接操作 DOM 元素的情況非常有用,例如,動態(tài)改變樣式、內(nèi)容或綁定事件。
訪問子組件的實例:如果你在父組件中使用 ref 來引用子組件,你可以訪問子組件的屬性和方法。這使得父組件可以與子組件進(jìn)行通信,調(diào)用子組件的方法或訪問子組件的數(shù)據(jù)。
vue3代碼塊
<template>
<div>
<input type="text" ref="inputRef" value="1111" />
<input type="text" ref="input2Ref">
<span>123</span>
</div>
</template>
<script>
import { ref, onMounted } from "vue";
export default {
setup() {
const inputRef = ref(null);
onMounted(() => {
console.log(inputRef.value); /** 這是inputDom */
console.log(inputRef.value.value) /** 1111 */
});
return { inputRef };
},
mounted() {
console.log(this.$refs.input2Ref)
}
};
</script>
<style></style>ref的本質(zhì)是轉(zhuǎn)為reactive
ref(18) 轉(zhuǎn)為 reactive({value:18})所以取值的時候比以前多一個.value。
vue3通過ref獲取 子組件的數(shù)據(jù)或方法
在Vue 3中,可以使用 ref 獲取子組件的數(shù)據(jù)和方法。以下是具體的步驟:
1. 在父組件中設(shè)置 ref
首先,在父組件中定義一個 ref,并將其傳遞給子組件:
<template>
<div>
<!-- 通過ref引用子組件 -->
<ChildComponent ref="childRef" />
<button @click="callChildMethod">調(diào)用子組件方法</button>
</div>
</template>
<script>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
export default {
components: { ChildComponent },
setup() {
const childRef = ref(null); // 創(chuàng)建ref以引用子組件
// 定義調(diào)用子組件方法的函數(shù)
const callChildMethod = () => {
if (childRef.value) {
childRef.value.someMethod(); // 調(diào)用子組件方法
console.log(childRef.value.someData); // 訪問子組件的數(shù)據(jù)
}
};
return {
childRef,
callChildMethod
};
}
};
</script>2. 在子組件中定義方法和數(shù)據(jù)
在子組件中,將你需要的 data 和 methods 定義為 expose 的內(nèi)容,這樣它們可以在父組件中被訪問到:
<template>
<div>子組件</div>
</template>
<script>
import { ref, defineExpose } from 'vue';
export default {
setup() {
const someData = ref('這是子組件的數(shù)據(jù)');
const someMethod = () => {
console.log('這是子組件的方法');
};
// 使用 defineExpose 暴露數(shù)據(jù)和方法
defineExpose({
someData,
someMethod
});
return {};
}
};
</script>解釋:
defineExpose:在Vue 3中,defineExpose是用來顯式暴露子組件的內(nèi)容。通過defineExpose,你可以選擇性地暴露子組件的data和methods,使得父組件可以通過ref來訪問。childRef.value.someMethod():調(diào)用子組件的方法。childRef.value.someData:訪問子組件的數(shù)據(jù)。
這樣設(shè)置后,父組件就可以通過 childRef 引用來調(diào)用子組件的內(nèi)容了。
注意
setup的執(zhí)行期間是在 beforeCreate和created之間執(zhí)行的,而這個時候dom還未被掛載,所以直接在setup中獲取dom是不可能成功的,只能在setup的生命周期onMounted及以后獲取dom。
在 Vue 3 中,你也可以通過 this.$refs 來訪問這個 DOM 元素的引用,就像在 Vue 2 中一樣。
vue2 獲取ref
在 Vue 2 中,你可以使用 ref 來獲取標(biāo)簽 DOM 元素的引用。以下是一些示例代碼,展示如何使用 ref 獲取 DOM 元素的引用:
<template>
<div>
<button @click="handleClick">獲取標(biāo)簽DOM</button>
<p ref="myParagraph">這是一個段落。</p>
</div>
</template>在上面的示例中,我們給 <p> 標(biāo)簽添加了一個 ref 屬性,并賦予它一個名稱,即 “myParagraph”?,F(xiàn)在,我們可以在 Vue 組件中通過 this.$refs 來訪問這個 DOM 元素的引用。
<script>
export default {
methods: {
handleClick() {
// 獲取DOM元素的引用
const paragraphElement = this.$refs.myParagraph;
// 在這里可以操作DOM元素
paragraphElement.style.color = 'red';
}
}
}
</script>在上面的示例中,我們使用 this.$refs.myParagraph 來訪問 <p> 標(biāo)簽的 DOM 元素引用,并隨后修改了它的文本顏色。這使你能夠在 Vue 組件中方便地訪問和操作 DOM 元素。
請注意,使用 ref 獲取 DOM 元素的引用通常不是 Vue 的首選方式,因為 Vue 更鼓勵數(shù)據(jù)驅(qū)動視圖。如果可能,盡量使用 Vue 數(shù)據(jù)綁定和指令來修改視圖,而不是直接操作 DOM 元素。然而,有時你可能需要直接訪問 DOM 元素,這時 ref 是一個可行的選擇。
vue 其它獲取dom的方式
在 Vue 中,除了使用 ref 來獲取 DOM 元素的引用之外,還可以使用其他方式來獲取 DOM 元素。
以下是一些常見的方法:
1.通過 $el 屬性:
this.$el.style.color = 'red'; // 修改組件的根元素樣式
- 在 Vue 組件中,你可以通過訪問
$el屬性來獲取組件的根 DOM 元素。 - 例如,在 Vue 組件的方法中,可以使用
this.$el訪問組件的根元素。
2.通過事件對象:
methods: {
handleClick(event) {
event.target.style.backgroundColor = 'green'; // 修改點擊的元素的背景顏色
}
}- 在事件處理程序中,事件對象(通常命名為
event)提供了target屬性,它指向觸發(fā)事件的 DOM 元素。 - 這可以在事件處理程序內(nèi)部使用,用來訪問事件的目標(biāo)元素。
3.使用 document.querySelector 和 document.querySelectorAll:
const element = document.querySelector('#myElement'); // 通過id選擇器獲取元素
const elements = document.querySelectorAll('.myClass'); // 通過類名選擇器獲取多個元素- 你可以使用標(biāo)準(zhǔn)的 DOM API 來通過選擇器查詢和獲取 DOM 元素。
- 這通常用于不在 Vue 組件內(nèi)的情況,或在 Vue 組件之外的操作。
4.通過自定義指令:
- 你可以創(chuàng)建自定義指令,以在 Vue 組件中處理 DOM 元素。這允許你以更高級的方式與 DOM 元素交互。
- 自定義指令可以在全局或局部注冊,然后在模板中使用。
這些方法提供了不同的方式來獲取和操作 DOM 元素,你可以根據(jù)具體的需求和情境選擇最適合的方法。不過,在 Vue 中使用 ref 和 $el 是較為常見和方便的方式,特別是在組件內(nèi)部。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
element根據(jù)輸入動態(tài)生成表格的示例代碼
在現(xiàn)代電商系統(tǒng)開發(fā)中,后臺管理界面經(jīng)常需要根據(jù)商品規(guī)格和規(guī)格值動態(tài)生成SKU表格,本文通過element-ui框架,展示了如何在Vue.js的環(huán)境下,利用子組件和動態(tài)綁定的方式,實現(xiàn)SKU表格的增刪改查功能2024-11-11
vuecli項目構(gòu)建SSR服務(wù)端渲染的實現(xiàn)
這篇文章主要介紹了vuecli項目構(gòu)建SSR服務(wù)端渲染的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
第一次使用webstrom簡單創(chuàng)建vue項目的一些報錯實戰(zhàn)記錄
在使用webstorm新建vue項目時常會遇到一些報錯,特別是新手第一次運行項目,這篇文章主要給大家介紹了關(guān)于第一次使用webstrom簡單創(chuàng)建vue項目的一些報錯實戰(zhàn)記錄,需要的朋友可以參考下2023-02-02

