欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2025年04月28日 14:25:58   作者:可缺不可濫  
這篇文章主要介紹了vue3 ref如何獲取標(biāo)簽dom問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

概述

在 Vue 中使用 ref 的主要作用是允許你訪問和操作 DOM 元素或組件實(shí)例。ref 允許你在 Vue 組件中獲取對(duì)特定 DOM 元素或子組件實(shí)例的引用,以便可以進(jìn)行以下操作:

直接訪問和修改 DOM 元素的屬性和內(nèi)容:你可以使用 ref 來訪問和修改特定 DOM 元素的屬性、樣式、內(nèi)容等。這對(duì)于需要直接操作 DOM 元素的情況非常有用,例如,動(dòng)態(tài)改變樣式、內(nèi)容或綁定事件。

訪問子組件的實(shí)例:如果你在父組件中使用 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})

所以取值的時(shí)候比以前多一個(gè).value。

vue3通過ref獲取 子組件的數(shù)據(jù)或方法

在Vue 3中,可以使用 ref 獲取子組件的數(shù)據(jù)和方法。以下是具體的步驟:

1. 在父組件中設(shè)置 ref

首先,在父組件中定義一個(gè) 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ù)

在子組件中,將你需要的 datamethods 定義為 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,你可以選擇性地暴露子組件的 datamethods,使得父組件可以通過 ref 來訪問。
  • childRef.value.someMethod():調(diào)用子組件的方法。
  • childRef.value.someData:訪問子組件的數(shù)據(jù)。

這樣設(shè)置后,父組件就可以通過 childRef 引用來調(diào)用子組件的內(nèi)容了。

注意

setup的執(zhí)行期間是在 beforeCreate和created之間執(zhí)行的,而這個(gè)時(shí)候dom還未被掛載,所以直接在setup中獲取dom是不可能成功的,只能在setup的生命周期onMounted及以后獲取dom。

在 Vue 3 中,你也可以通過 this.$refs 來訪問這個(gè) 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">這是一個(gè)段落。</p>
  </div>
</template>

在上面的示例中,我們給 <p> 標(biāo)簽添加了一個(gè) ref 屬性,并賦予它一個(gè)名稱,即 “myParagraph”。現(xiàn)在,我們可以在 Vue 組件中通過 this.$refs 來訪問這個(gè) 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 元素。

請(qǐng)注意,使用 ref 獲取 DOM 元素的引用通常不是 Vue 的首選方式,因?yàn)?Vue 更鼓勵(lì)數(shù)據(jù)驅(qū)動(dòng)視圖。如果可能,盡量使用 Vue 數(shù)據(jù)綁定和指令來修改視圖,而不是直接操作 DOM 元素。然而,有時(shí)你可能需要直接訪問 DOM 元素,這時(shí) ref 是一個(gè)可行的選擇。

vue 其它獲取dom的方式

在 Vue 中,除了使用 ref 來獲取 DOM 元素的引用之外,還可以使用其他方式來獲取 DOM 元素。

以下是一些常見的方法:

1.通過 $el 屬性

this.$el.style.color = 'red'; // 修改組件的根元素樣式
  • 在 Vue 組件中,你可以通過訪問 $el 屬性來獲取組件的根 DOM 元素。
  • 例如,在 Vue 組件的方法中,可以使用 this.$el 訪問組件的根元素。

2.通過事件對(duì)象

methods: {
  handleClick(event) {
    event.target.style.backgroundColor = 'green'; // 修改點(diǎn)擊的元素的背景顏色
  }
}
  • 在事件處理程序中,事件對(duì)象(通常命名為 event)提供了 target 屬性,它指向觸發(fā)事件的 DOM 元素。
  • 這可以在事件處理程序內(nèi)部使用,用來訪問事件的目標(biāo)元素。

3.使用 document.querySelectordocument.querySelectorAll

const element = document.querySelector('#myElement'); // 通過id選擇器獲取元素
const elements = document.querySelectorAll('.myClass'); // 通過類名選擇器獲取多個(gè)元素
  • 你可以使用標(biāo)準(zhǔn)的 DOM API 來通過選擇器查詢和獲取 DOM 元素。
  • 這通常用于不在 Vue 組件內(nèi)的情況,或在 Vue 組件之外的操作。

4.通過自定義指令

  • 你可以創(chuàng)建自定義指令,以在 Vue 組件中處理 DOM 元素。這允許你以更高級(jí)的方式與 DOM 元素交互。
  • 自定義指令可以在全局或局部注冊(cè),然后在模板中使用。

這些方法提供了不同的方式來獲取和操作 DOM 元素,你可以根據(jù)具體的需求和情境選擇最適合的方法。不過,在 Vue 中使用 ref$el 是較為常見和方便的方式,特別是在組件內(nèi)部。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue頁面首次載入優(yōu)化的全過程

    Vue頁面首次載入優(yōu)化的全過程

    凡是做SPA的項(xiàng)目,特別是移動(dòng)端的SAP項(xiàng)目,首屏加載速度必定是一個(gè)繞不過去的話題,下面這篇文章主要給大家介紹了關(guān)于Vue頁面首次載入優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • element根據(jù)輸入動(dòng)態(tài)生成表格的示例代碼

    element根據(jù)輸入動(dòng)態(tài)生成表格的示例代碼

    在現(xiàn)代電商系統(tǒng)開發(fā)中,后臺(tái)管理界面經(jīng)常需要根據(jù)商品規(guī)格和規(guī)格值動(dòng)態(tài)生成SKU表格,本文通過element-ui框架,展示了如何在Vue.js的環(huán)境下,利用子組件和動(dòng)態(tài)綁定的方式,實(shí)現(xiàn)SKU表格的增刪改查功能
    2024-11-11
  • vue.js全局組件和局部組件示例代碼

    vue.js全局組件和局部組件示例代碼

    組件是Vue.js的最核心的功能,所謂的組件化就是把頁面拆分成多個(gè)組件,每個(gè)組件單獨(dú)使用CSS,JS,模板,圖片等資源進(jìn)行開發(fā)與維護(hù),然后在制作網(wǎng)頁的時(shí)候根據(jù)需要調(diào)用相關(guān)的組件,這篇文章主要給大家介紹了關(guān)于vue.js全局組件和局部組件的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Vue自定義組件雙向綁定實(shí)現(xiàn)原理及方法詳解

    Vue自定義組件雙向綁定實(shí)現(xiàn)原理及方法詳解

    這篇文章主要介紹了Vue自定義組件雙向綁定實(shí)現(xiàn)原理及方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Vuex給state中的對(duì)象新添加屬性遇到的問題及解決

    Vuex給state中的對(duì)象新添加屬性遇到的問題及解決

    這篇文章主要介紹了Vuex給state中的對(duì)象新添加屬性遇到的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue實(shí)現(xiàn)簡(jiǎn)單loading進(jìn)度條

    vue實(shí)現(xiàn)簡(jiǎn)單loading進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)簡(jiǎn)單loading進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • vue實(shí)現(xiàn)物流時(shí)間軸效果

    vue實(shí)現(xiàn)物流時(shí)間軸效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)物流時(shí)間軸效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 簡(jiǎn)單實(shí)現(xiàn)一個(gè)vue公式編輯器組件demo

    簡(jiǎn)單實(shí)現(xiàn)一個(gè)vue公式編輯器組件demo

    這篇文章主要介紹了輕松實(shí)現(xiàn)一個(gè)簡(jiǎn)單的vue公式編輯器組件示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • vuecli項(xiàng)目構(gòu)建SSR服務(wù)端渲染的實(shí)現(xiàn)

    vuecli項(xiàng)目構(gòu)建SSR服務(wù)端渲染的實(shí)現(xiàn)

    這篇文章主要介紹了vuecli項(xiàng)目構(gòu)建SSR服務(wù)端渲染的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 第一次使用webstrom簡(jiǎn)單創(chuàng)建vue項(xiàng)目的一些報(bào)錯(cuò)實(shí)戰(zhàn)記錄

    第一次使用webstrom簡(jiǎn)單創(chuàng)建vue項(xiàng)目的一些報(bào)錯(cuò)實(shí)戰(zhàn)記錄

    在使用webstorm新建vue項(xiàng)目時(shí)常會(huì)遇到一些報(bào)錯(cuò),特別是新手第一次運(yùn)行項(xiàng)目,這篇文章主要給大家介紹了關(guān)于第一次使用webstrom簡(jiǎn)單創(chuàng)建vue項(xiàng)目的一些報(bào)錯(cuò)實(shí)戰(zhàn)記錄,需要的朋友可以參考下
    2023-02-02

最新評(píng)論