關(guān)于前端的碎碎念6-vue初體驗(yàn)之打基礎(chǔ)
Vue 是什么?
Vue (讀音 /vju?/,類似于 **view) 是一套用于構(gòu)建用戶界面的漸進(jìn)式框架**
vue 的核心庫只關(guān)注視圖層,不僅易于上手,還便于與第三方庫或既有項(xiàng)目整合
指令
本質(zhì)就是自定義屬性
Vue中指定都是以 v- 開頭
v-cloak
防止頁面加載時(shí)出現(xiàn)閃爍問題
??? ??
????v-text
v-text指令用于將數(shù)據(jù)填充到標(biāo)簽中,作用于插值表達(dá)式類似,但是沒有閃動(dòng)問題
如果數(shù)據(jù)中有HTML標(biāo)簽會(huì)將html標(biāo)簽一并輸出
注意:此處為單向綁定,數(shù)據(jù)對(duì)象上的值改變,插值會(huì)發(fā)生變化;但是當(dāng)插值發(fā)生變化并不會(huì)影響數(shù)據(jù)對(duì)象的值
???????? ????????{{msg}}??? ????
v-html
用法和v-text 相似 但是他可以將HTML片段填充到標(biāo)簽中
可能有安全問題, 一般只在可信任內(nèi)容上使用?v-html,永不用在用戶提交的內(nèi)容上
它與v-text區(qū)別在于v-text輸出的是純文本,瀏覽器不會(huì)對(duì)其再進(jìn)行html解析,但v-html會(huì)將其當(dāng)html標(biāo)簽解析后輸出。
{{??message?}}
? ?????? ?? ? ??v-pre
顯示原始信息跳過編譯過程
跳過這個(gè)元素和它的子元素的編譯過程。
一些靜態(tài)的內(nèi)容不需要編譯加這個(gè)指令可以加快渲染
v-once
執(zhí)行一次性的插值【當(dāng)數(shù)據(jù)改變時(shí),插值處的內(nèi)容不會(huì)繼續(xù)更新】
雙向數(shù)據(jù)綁定
當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候,視圖也就發(fā)生變化
當(dāng)視圖發(fā)生變化的時(shí)候,數(shù)據(jù)也會(huì)跟著同步變化
v-model是一個(gè)指令,限制在?、
事件修飾符
在事件處理程序中調(diào)用?event.preventDefault()?或?event.stopPropagation()?是非常常見的需求。
Vue 不推薦我們操作DOM 為了解決這個(gè)問題,Vue.js 為?v-on?提供了事件修飾符
修飾符是由點(diǎn)開頭的指令后綴來表示的
按鍵修飾符
在做項(xiàng)目中有時(shí)會(huì)用到鍵盤事件,在監(jiān)聽鍵盤事件時(shí),我們經(jīng)常需要檢查詳細(xì)的按鍵。Vue 允許為?v-on?在監(jiān)聽鍵盤事件時(shí)添加按鍵修飾符
常用的按鍵修飾符 .enter?=>????enter鍵 .tab?=>?tab鍵 .delete?(捕獲“刪除”和“退格”按鍵)?=>??刪除鍵 .esc?=>?取消鍵 .space?=>??空格鍵 .up?=>??上 .down?=>??下 .left?=>??左 .right?=>??右
自定義按鍵修飾符別名
在Vue中可以通過config.keyCodes自定義按鍵修飾符別名
v-bind
v-bind 指令被用來響應(yīng)地更新 HTML 屬性
v-bind:href 可以縮寫為 :href;
分支結(jié)構(gòu)
1- 多個(gè)元素 通過條件判斷展示或者隱藏某個(gè)元素。或者多個(gè)元素
2- 進(jìn)行兩個(gè)視圖之間的切換
v-show本質(zhì)就是標(biāo)簽display設(shè)置為none,控制隱藏
v-show只編譯一次,后面其實(shí)就是控制css,而v-if不停的銷毀和創(chuàng)建,故v-show性能更好一點(diǎn)。
v-if是動(dòng)態(tài)的向DOM樹內(nèi)添加或者刪除DOM元素
v-if切換有一個(gè)局部編譯/卸載的過程,切換過程中合適地銷毀和重建內(nèi)部的事件監(jiān)聽和子組件
循環(huán)結(jié)構(gòu)
用于循環(huán)的數(shù)組里面的值可以是對(duì)象,也可以是普通元素
- ??? ??
- ????{{?item.message?}} ?? ?
不推薦同時(shí)使用?v-if?和?v-for
當(dāng)?v-if?與?v-for?一起使用時(shí),v-for?具有比?v-if?更高的優(yōu)先級(jí)。
? ?????
key 的作用
key來給每個(gè)節(jié)點(diǎn)做一個(gè)唯一標(biāo)識(shí)
key的作用主要是為了高效的更新虛擬DOM
- ??
- ...
案例選項(xiàng)卡
- ????????????????
- apple ????????????????
- orange ????????????????
- lemon ????????????
list:?[{ ????????id:?1, ????????title:?'apple', ?????????path:?'http://m.bai1xia.com/news/zb_users/upload/2022/05/20220529123647_18081.png' ????????},? ????????{ ??????????id:?2, ??????????title:?'orange', ??????????path:?'http://m.bai1xia.com/news/zb_users/upload/2022/05/20220529123647_14897.png' ????????}, ????????{ ??????????id:?3, ??????????title:?'lemon', ??????????path:?'http://m.bai1xia.com/news/zb_users/upload/2022/05/20220529123647_98099.png' ??????????????? ??????}]
把tab欄 中的數(shù)替換到頁面上
把 data 中 title 利用 v-for 循環(huán)渲染到頁面上
把 data 中 path利用 v-for 循環(huán)渲染到頁面上
- ???????????????????? ?????????????????????
- {{item.title}} ????????????????
4.1 、讓默認(rèn)的第一項(xiàng)tab欄高亮
通過動(dòng)態(tài)綁定class 來實(shí)現(xiàn) 第一個(gè)li 的索引為 0 和 currentIndex 的值剛好相等
currentIndex === index 如果相等 則添加類名 active 否則 添加 空類名
tab欄高亮 通過添加類名active 來實(shí)現(xiàn) (CSS active 的樣式已經(jīng)提前寫好)
在data 中定義一個(gè) 默認(rèn)的 索引 currentIndex 為 0
給第一個(gè)li 添加 active 的類名
4.2 、讓默認(rèn)的第一項(xiàng)tab欄對(duì)應(yīng)的div 顯示
實(shí)現(xiàn)思路 和 第一個(gè) tab 實(shí)現(xiàn)思路一樣 只不過 這里控制第一個(gè)div 顯示的類名是 current
4.3 、點(diǎn)擊每一個(gè)tab欄 當(dāng)前的高亮 其他的取消高亮
給每一個(gè)li添加點(diǎn)擊事件
讓當(dāng)前的索引 index 和 當(dāng)前 currentIndex 的 值 進(jìn)項(xiàng)比較
如果相等 則當(dāng)前l(fā)i 添加active 類名 當(dāng)前的 li 高亮 當(dāng)前對(duì)應(yīng)索引的 div 添加 current 當(dāng)前div 顯示 其他隱藏
?? ??
- ? ????????
- {{item.title}} ??????
案例選項(xiàng)卡
tab欄切換增強(qiáng)版
題目描述
點(diǎn)擊tab欄 內(nèi)容區(qū)域顯示對(duì)應(yīng)的內(nèi)容
如 點(diǎn)擊 SECTION 1 則 內(nèi)容區(qū)域顯示 對(duì)應(yīng) SECTION 1 的內(nèi)容 同時(shí)當(dāng)前 SECTION的字體顏色變成藍(lán)色
第一步: 將 list 中的數(shù)據(jù)title 渲染到 左側(cè)和 右側(cè)的tab欄中注意: 左右各渲染3條數(shù)據(jù)
第二步: 將 list 中的數(shù)據(jù)title 和 content 渲染到 內(nèi)容區(qū)域
第三步: 給左側(cè)的tab欄中的li綁定事件 實(shí)現(xiàn)動(dòng)態(tài)切換active 類名注意: 給點(diǎn)擊的當(dāng)前l(fā)i 添加類名 active 即可讓當(dāng)前的li字體顏色改變 (類名是 active的樣式已經(jīng)在CSS中提前定義好 )其他 li 需要移除類名 active
第四步: 拿到當(dāng)前點(diǎn)擊li的索引 讓 內(nèi)容區(qū)域中 對(duì)應(yīng)索引類名是 tab-pane 的 div 顯示注意: 給 類名是 tab-pane 的 div 添加 類名 active 即可讓當(dāng)前div 顯示出來 (類名是 active的樣式已經(jīng)在CSS中提前定義好 )其他 tab-pane 的 div 需要移除類名 active
第五步: 給右側(cè)的tab欄中的li綁定事件 實(shí)現(xiàn)動(dòng)態(tài)切換active 類名注意: 給點(diǎn)擊的當(dāng)前l(fā)i 添加類名 active 即可讓當(dāng)前的li字體顏色改變 (類名是 active的樣式已經(jīng)在CSS中提前定義好 )
第六步: 拿到當(dāng)前點(diǎn)擊li的索引 讓 內(nèi)容區(qū)域中 對(duì)應(yīng)索引類名是 tab-pane 的 div 顯示注意: 這里需要注意索引問題:
點(diǎn)擊右側(cè)第一個(gè)div 的時(shí)候 需要讓內(nèi)容區(qū)域中的第 4個(gè) div 顯示出來
點(diǎn)擊右側(cè)第2個(gè)div 的時(shí)候 需要讓內(nèi)容區(qū)域中的第 5個(gè) div 顯示出來
???? ???? ???? ????
- ????????????
- ?{{item.title}}? ????????
{{item.title}}
????????????????{{item.content}}
????????????- ????????????
- =?list.length/2"?v-for="(item,?index)?in?list">?{{item.title}}? ????????