Vue3 筆記
以前寫的 Vue2 都忘得差不多了,藉著最近接到 Vue3 專案的機會,重新學習一下
Vue3 推薦結合以下套件使用,透過官方推薦的初始化指令 npm init vue@latest
可自動建立一個基礎的 Vue 專案
- Vite: 建置工具
- Pinia: 狀態管理
Import
CDN:
<script src="https://unpkg.com/vue@next"></script> |
Virtual DOM
Vue 並非直接對頁面進行渲染,其會先於背景的 Virtual DOM 運算,當確定整個頁面結構後,再一次性地將結果繪製到頁面中,以此提升效能
reactive (): 資料連動
基本單向的資料連動
|
也可以先新增好物件再掛載
const framework = { |
v-model
在 v-model 中能加入一些修飾符來加強運用,可以使用的修飾符如下:
v-model.lazy: 在文字方塊 onChange 時才會觸發更新。
v-model.number: 將輸入值轉換為數值格式。
v-model.trim: 去除欄位中的前後空白字元。
<div id="app"> |
v-for
<div id="app"> |
v-bind
v-bind 是在 HTML 屬性中,如果需要用到 vue data 時使用
- :value = 修飾符寫法
- :key = 綁定標題 / 內容,要注意給的 key 值是不能有重複的,否則頁面會發生錯誤
<div id="app"> |
Event
<div id="app"> |
v-on 可以用 @ 縮寫如下:
<select @change="changeValue($event, 'type')"> |
事件修飾符
- @click.prevent: preventDefault
- @click.stop: 阻止事件向上傳遞
- @click.capture: 先將本身觸發的函數先執行完畢後再下傳事件的效果。 Ex. 使用此語法後執行順序 = navFn > submitFn
- @click.self: 只在被點擊對象是自己的時候執行
- @click.once: 僅第一次按下時觸發動作
按鍵修飾符
- @keydown.prevent:會擋住在表單範圍內按下 Enter 鍵之後,自動送出表單的功能
- @keydown.ctrl.enter=”enterFn”:使用者在此 input 中按下 Ctrl + Enter 時會觸發 enterFn
- @click.prevent.alt.exact=”clickFn”:使用者在需要按下鍵盤上的 Alt + 滑鼠左鍵點擊按鈕才會觸發 ClickFn,若將其中 exact 的部分拿掉,則按下鍵盤 Alt + Shift + 左鍵,也會觸發該函數。
<div id="app"> |
computed (): 計算屬性
Function 寫法:
<div id="app"> |
Computed 寫法:僅針對參考資料異動時才會觸發運算 > 效能較佳
<div id="app"> |
Setter
預設 Computed 為 read-only,若直接修改結果 Console 會跳出警告:Write operation failed: computed value is readonly
解法:
<div id="app"> |
Watch (): 監聽器
Watch 主要是去監聽在 Vue 裡面的數據,若數據發生變化的時候,會自動去執行相對應的動作
Computed 範例改寫:
<div id="app"> |
使用情境:
<div id="app"> |
Replace 那一行一定會有問題,因為他是要將值回寫到 username 中,而 Computed 還需要透過 Setter 來做那相對來說就麻煩很多,那 Function 呢?當然以上都是可行的作法,但都不如 Watch 來得方便,所以沒有什麼是一定要用到誰,而是透過不同的使用情境來決定!
多層下拉選單
<div id="app"> |