# <font color="#FF0000">ONLY</font> <font color="#FF8C00">ONLY</font><font color="#FFD600"> VUE </font><font color="#32CD32">VUE</font> <font color="#228B22">VUE</font> ![](https://i.imgur.com/sQTmySw.png) > Vue.js 最主要的核心功能有兩個部分:「宣告式渲染」與 「元件系統」 ### 📍 Vue2 template ``` // Vue 2.x const vm = new Vue({ data: { message: 'Hello Vue!' } }); // 透過 $mount 掛載至指定的網頁節點 vm.$mount('#app'); ``` ### 📍 Vue3 template ``` const vm = Vue.createApp({ data () { return { message: 'Hello Vue 3.0!' } } }); // 透過 $mount 掛載至指定的網頁節點 vm.$mount('#app'); ``` ## 📒 template 模板屬性 #### 🔻template 內的 HTML 當作模板來使用,顯示的效果與直接使用 HTML 模板是一樣的。 ![](https://i.imgur.com/5L1kooI.png) ## 📑 <font color="#FF0000">模板衝突</font> #### 🔻若所使用的後端模板也採用 Mustache {{ }} 的模板語法來表示,則可以利用 Vue.js 提供的 delimiters 屬性 來重新定義模板語法 ![](https://i.imgur.com/eLBRuHm.png) ## 📑 <font color="#FF0000">資料公用汙染</font> #### 🔻若使用的資料是同一個,則在改變另一個數值時,另一個也會跟著改變,所以建議寫成不同物件 ## 📑 <font color="#FF0000">變數命名錯誤</font> #### 🔻若是以底線 _ 或錢字號 $ 作為開頭的屬性,可能會與 Vue.js 內建的屬性與 API 名稱產生衝突,所以應該盡量避免 ## 📒 methods 方法 ![](https://i.imgur.com/eC1J5t6.png) ## 📑 <font color="#FF0000">箭頭函式 (arrow function) </font> #### 🔻由於箭頭函式沒有自己的 this,也就是說,在箭頭函式裡面使用 this,實際上這個 this 跟外面的 this 是同一個,所以如果要在 methods 裡面需要存取實體狀態的情況,就不適合使用箭頭函式 ![](https://i.imgur.com/RrcxmSV.png) ### <del>你很懶惰的方式 : ![](https://i.imgur.com/kvxaXIJ.png) ## 📒 computed 計算屬性 #### 🔻computed 寫法跟 methods 的寫法有 87% 像,差別就只有模板中的 少了小括號 ![](https://i.imgur.com/O1DMXPY.png) ## 📑 <font color="#FF0000">computed 特性</font> #### 🔻computed 會將結果暫存,觀察的屬性沒有被更新的情況下,computed 就不會重複被執行 #### 🔻同樣的重複計算,用 computed 來處理會比 methods 效能來得好,computed 屬性中的 function 無法使用參數,需要帶入參數的情況,只能使用 mehtods 來處理 ### 🎯 加入 get 與 set 的 function: #### 🔻computed 除了可以將另一個實體屬性「加工」後回傳 (get),還可以透過 (set) 寫回 computed 屬性 ![](https://i.imgur.com/KCoyMtt.png) ## 📒 directive 指令 #### 🔻指令搭配運算式 (expression) 的值被改變時,對應的標籤 (包括節點、元件等) 會隨之影響,透過指令的作用與改變狀態(資料)的變化來操作整個網頁系統 #### 🔻 {{ }} 的模板語法並沒有辦法被套用在 HTML 標籤的「屬性」上,需要由 Vue.js 來控制標籤的「屬性」 :::success ## 📑 <font color="green">v-bind 屬性綁定</font> ![](https://i.imgur.com/kdJlDfv.png) ### ✏ 正規寫法 : ![](https://i.imgur.com/SaPy5k7.png) ### ✏ 簡易寫法 : ![](https://i.imgur.com/YBqTiGp.png) ### 結果 : ![](https://i.imgur.com/t3Mt3Av.png) ### 結論 : #### 🔻常見的標籤屬性如 id 、 圖片的 src,或是連結的 href 等 DOM 的屬性,都是可以透過指令 v-bind 來控制它的內容 ::: :::info ## 📑 <font color="blue">v-model 表單綁定</font> ### 1. input 文字框 ![](https://i.imgur.com/OCT2DeM.png) ### 2. textarea 文字方塊 ![](https://i.imgur.com/IlQKcak.png) ### 📍 在 <textarea> 裡面使用大括號 {{ }} 模板語法而不是 v-model ,更新的內容不會寫回data ### 3. radio 單選框 ![](https://i.imgur.com/nmlR2vY.png) ### 📍 單選框 data : ![](https://i.imgur.com/BP30FEb.png) ### 4. checkbox 複選框 ![](https://i.imgur.com/qgE7cXh.png) ### 📍 複選框 data :「陣列」 ![](https://i.imgur.com/WXrXk5V.png) ### 5. select 下拉列表選單 ![](https://i.imgur.com/qKgziuB.png) ### 📍 選單 data : ![](https://i.imgur.com/bJHM6VQ.png) ### 結論 : #### 🔻v-model 指令的表單元素會自動忽略原有的 value、 checked 與 selected 屬性,以 data 內的狀態為主 ::: :::info ## 📑 <font color="blue"> v-model 與修飾子 (實用)</font> ### 1 .number #### 🔻 即便輸入的都是數字,但DOM API 取出的時候會是以「字串」的形式出現,Vue.js 針對這類數字轉型的問題提供了 .number 的修飾子 ![](https://i.imgur.com/yakvPZP.png) ### 2 .trim #### 🔻 針對某個輸入框自動過濾前後的空白字元 ![](https://i.imgur.com/2PewPwy.png) ## 📑 <font color="blue"> 模板綁定</font> #### v-text 指令渲染的結果會無視標籤內原本的內容 #### v-html 會以 html 的形式呈現,而不是文字 #### v-once 只會渲染指定的節點一次,往後不再更新 #### v-pre 顯示原本的大括號,而不是當作模板使用 ::: ## 📒 事件處理 ### <font color="blue">v-on 事件綁定 </font> #### 🔻 使用方式 v-on:[事件名稱]="運算式" --- ### <font color="blue">v-on 與 event 物件</font> #### 🔻 v-on 觸發事件時,預設會將 event 物件當作參數傳入,在模板中可以指定傳入 $event 來指定 event 物件 ![](https://i.imgur.com/GjGWDij.png) ![](https://i.imgur.com/eyoHhws.png) --- ### <font color="blue">v-on 與修飾子</font> #### .stop 用來阻擋事件冒泡,click 事件就不會向外層傳遞,使用方法 @click.stop #### .prevent 用來阻擋元素的預設行為 #### .capture 用來指定事件以捕獲 (capturing) 的形式來觸發 #### .self 只會觸發元素自己的事件行為,由子層元素傳遞來的事件則不會觸發 #### .once 讓指定的事件只會觸發一次 #### .passive 告訴瀏覽器這個事件處理器會不會呼叫 event.preventDefault 來停止瀏覽器的原生行為 --- ### <font color="blue">鍵盤修飾子</font> #### 🔻 可以針對需要判斷的按鍵來進行不同的動作 #### .enter / .tab / .delete (包含 del 與 backspace 鍵) #### .esc / .space #### .up / .down / .left / .right #### .ctrl / .alt / .shift #### .meta ### <font color="blue">.exact 精確判斷</font> #### 🔻 只有在按下指定指定按鍵才會執行,被用來作為系統按鍵的各種組合熱鍵判斷使用 ### <font color="blue">滑鼠修飾子</font> #### .left / .right / .middle #### 🔻 用來提供滑鼠按鍵的點擊判斷 --- ### <font color="blue">條件判斷</font> v-show truthy 就顯示, falsy 則隱藏 v-if 值為 falsy 時,元素會直接被移除 ## <font color="#FF0000">持續更新中...</font> ![](https://i.imgur.com/3hcEu7q.gif)