今天來談一些vue的核心概念
Lifecycle&Lifecycle Hooks
Lifecycle:生命週期,每個元件都有一個從「創建 ->使用 ->銷毀」的完整過程。
Lifecycle Hooks:中文翻成生命週期鉤子,可以在特定時間點執行特定的函式,這些函式就是vue提供對應的Lifecycle Hooks
onMounted是最常用的Lifecycle Hooks,他保證程式碼執行時,元件的HTML已被渲染到頁面,能夠安全的操作DOM。
Template Refs
Template Refs:模板參考,在Vue開發中,通常不會直接操作DOM,但有時必須這麼做,例如以下這接狀況 :
測量元素的長寬
將元素傳遞給第三方函式庫,像是圖表庫或地圖套件
取得輸入框元素並自動設定焦點(focus( ) )
而在Vue中,模板參考是透過ref( )來實現的
下方提供一個結合生命週期和模板參考的程式範例
<script setup>
import { ref, onMounted } from 'vue';
// 宣告一個模板參考來引用 content-box
const contentRef = ref(null);
// 宣告一個響應式變數來儲存測量結果
const boxHeight = ref(0);
// 在元件掛載後執行
onMounted(() => {
if (contentRef.value) {
// 透過 .value 取得 DOM 元素
// 使用 clientHeight 屬性來取得元素的高度
boxHeight.value = contentRef.value.clientHeight;
}
});
</script>
<template>
<div>
<h2>內容區塊</h2>
<div ref="contentRef" class="content-box">
<p>這是內容。其高度會根據這裡的文字多寡而變動。</p>
<p>你可以嘗試增加或減少這裡的文字,看看測量的高度是否會跟著改變。</p>
</div>
<hr>
<h3>測量結果</h3>
<p>此區塊的高度為:{{ boxHeight }} px</p>
</div>
</template>
<style scoped>
.content-box { //設定.content-box的樣式
border: 1px solid #ccc;
padding: 20px;
max-width: 400px;
}
</style>
const contentRef = ref(null);
創建一個名為contenRef的模板參考,初始值為nullconst boxHeight = ref(0);
創建一個響應式變數來儲存測量到的高度,值更新時,<p>
標籤中的顯示也會自動更新onMounted(() => {if (contentRef.value) {boxHeight.value = contentRef.value.clientHeight; }});
這段Lifecycle Hooks是確保裡面的程式碼會在content-box元素被渲染到網頁上後才執行。contentRef.value
不再是null,而是指向ref="contentRef"
這個<div>
的真實DOM元素contentRef.value.clientHeight;
是標準DOM屬性,用來取得元素可見高度boxHeight.value =
將測量到的高度值給響應式變數boxHeight
好的今天先到這裡,我的腦子也要好好消化今天新的內容
話說終於第十天了,賽程過了三分之一,可喜可賀~
各位明天見囉~