vue-day01-vue模板语法
文章目錄
- Vue 是什么?
- 使用Vue將helloworld 渲染到頁面上
- 指令
- v-cloak
- v-text
- v-html
- v-pre
- **v-once**
- 雙向數(shù)據(jù)綁定
- v-model
- mvvm
- v-on
- v-on事件函數(shù)中傳入?yún)?shù)
- 事件修飾符
- 按鍵修飾符
- 自定義按鍵修飾符別名
- ==小案例==-簡單計算器
- v-bind
- 綁定對象
- 綁定class
- 綁定對象和綁定數(shù)組 的區(qū)別
- 綁定style
- 分支結(jié)構(gòu)
- v-if 使用場景
- v-show 和 v-if的區(qū)別
- 循環(huán)結(jié)構(gòu)
- v-for
- 案例選項(xiàng)卡
- 1、 HTML 結(jié)構(gòu)
- 2、 提供的數(shù)據(jù)
- 3、 把數(shù)據(jù)渲染到頁面
- 4、 給每一個tab欄添加事件,并讓選中的高亮
Vue 是什么?
- Vue (讀音 /vju?/,類似于 view) 是一套用于構(gòu)建用戶界面的漸進(jìn)式框架
- vue 的核心庫只關(guān)注視圖層,不僅易于上手,還便于與第三方庫或既有項(xiàng)目整合
使用Vue將helloworld 渲染到頁面上
指令
- 本質(zhì)就是自定義屬性
- Vue中指定都是以 v- 開頭
v-cloak
-
防止頁面加載時出現(xiàn)閃爍問題
<style type="text/css">/* 1、通過屬性選擇器 選擇到 帶有屬性 v-cloak的標(biāo)簽 讓他隱藏*/[v-cloak]{/* 元素隱藏 */display: none;}</style> <body><div id="app"><!-- 2、 讓帶有插值 語法的 添加 v-cloak 屬性 在 數(shù)據(jù)渲染完場之后,v-cloak 屬性會被自動去除,v-cloak一旦移除也就是沒有這個屬性了 屬性選擇器就選擇不到該標(biāo)簽也就是對應(yīng)的標(biāo)簽會變?yōu)榭梢?-><div v-cloak >{{msg}}</div></div><script type="text/javascript" src="js/vue.js"></script><script type="text/javascript">var vm = new Vue({// el 指定元素 id 是 app 的元素 el: '#app',// data 里面存儲的是數(shù)據(jù)data: {msg: 'Hello Vue'}}); </script> </body> </html>
v-text
- v-text指令用于將數(shù)據(jù)填充到標(biāo)簽中,作用于插值表達(dá)式類似,但是沒有閃動問題
- 如果數(shù)據(jù)中有HTML標(biāo)簽會將html標(biāo)簽一并輸出
- 注意:此處為單向綁定,數(shù)據(jù)對象上的值改變,插值會發(fā)生變化;但是當(dāng)插值發(fā)生變化并不會影響數(shù)據(jù)對象的值
v-html
-
用法和v-text 相似 但是他可以將HTML片段填充到標(biāo)簽中
-
可能有安全問題, 一般只在可信任內(nèi)容上使用 v-html,永不用在用戶提交的內(nèi)容上
-
它與v-text區(qū)別在于v-text輸出的是純文本,瀏覽器不會對其再進(jìn)行html解析,但v-html會將其當(dāng)html標(biāo)簽解析后輸出。
<div id="app"><p v-html="html"></p> <!-- 輸出:html標(biāo)簽在渲染的時候被解析 --><p>{{message}}</p> <!-- 輸出:<span>通過雙括號綁定</span> --><p v-text="text"></p> <!-- 輸出:<span>html標(biāo)簽在渲染的時候被源碼輸出</span> --> </div> <script>let app = new Vue({el: "#app",data: {message: "<span>通過雙括號綁定</span>",html: "<span>html標(biāo)簽在渲染的時候被解析</span>",text: "<span>html標(biāo)簽在渲染的時候被源碼輸出</span>",}}); </script>
v-pre
- 顯示原始信息跳過編譯過程
- 跳過這個元素和它的子元素的編譯過程。
- 一些靜態(tài)的內(nèi)容不需要編譯加這個指令可以加快渲染
v-once
- 執(zhí)行一次性的插值【當(dāng)數(shù)據(jù)改變時,插值處的內(nèi)容不會繼續(xù)更新】
雙向數(shù)據(jù)綁定
- 當(dāng)數(shù)據(jù)發(fā)生變化的時候,視圖也就發(fā)生變化
- 當(dāng)視圖發(fā)生變化的時候,數(shù)據(jù)也會跟著同步變化
v-model
- v-model是一個指令,限制在 <input>、<select>、<textarea>、components中使用
mvvm
- MVC 是后端的分層開發(fā)概念; MVVM是前端視圖層的概念,主要關(guān)注于 視圖層分離,也就是說:MVVM把前端的視圖層,分為了 三部分 Model, View , VM ViewModel
- m model
- 數(shù)據(jù)層 Vue 中 數(shù)據(jù)層 都放在 data 里面
- v view 視圖
- Vue 中 view 即 我們的HTML頁面
- vm (view-model) 控制器 將數(shù)據(jù)和視圖層建立聯(lián)系
- vm 即 Vue 的實(shí)例 就是 vm
v-on
- 用來綁定事件的
- 形式如:v-on:click 縮寫為 @click;
v-on事件函數(shù)中傳入?yún)?shù)
<body><div id="app"><div>{{num}}</div><div><!-- 如果事件直接綁定函數(shù)名稱,那么默認(rèn)會傳遞事件對象作為事件函數(shù)的第一個參數(shù) --><button v-on:click='handle1'>點(diǎn)擊1</button><!-- 2、如果事件綁定函數(shù)調(diào)用,那么事件對象必須作為最后一個參數(shù)顯示傳遞,并且事件對象的名稱必須是$event --><button v-on:click='handle2(123, 456, $event)'>點(diǎn)擊2</button></div></div><script type="text/javascript" src="js/vue.js"></script><script type="text/javascript">var vm = new Vue({el: '#app',data: {num: 0},methods: {handle1: function(event) {console.log(event.target.innerHTML)},handle2: function(p, p1, event) {console.log(p, p1)console.log(event.target.innerHTML)this.num++;}}});</script>事件修飾符
- 在事件處理程序中調(diào)用 event.preventDefault() 或 event.stopPropagation() 是非常常見的需求。
- Vue 不推薦我們操作DOM 為了解決這個問題,Vue.js 為 v-on 提供了事件修飾符
- 修飾符是由點(diǎn)開頭的指令后綴來表示的
按鍵修飾符
- 在做項(xiàng)目中有時會用到鍵盤事件,在監(jiān)聽鍵盤事件時,我們經(jīng)常需要檢查詳細(xì)的按鍵。Vue 允許為 v-on 在監(jiān)聽鍵盤事件時添加按鍵修飾符
自定義按鍵修飾符別名
- 在Vue中可以通過config.keyCodes自定義按鍵修飾符別名
小案例-簡單計算器
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title> </head> <body><div id="app"><h1>簡單計算器</h1><div><span>數(shù)值A(chǔ):</span><span><input type="text" v-model='a'></span></div><div><span>數(shù)值B:</span><span><input type="text" v-model='b'></span></div><div><button v-on:click='handle'>計算</button></div><div><span>計算結(jié)果:</span><span v-text='result'></span></div></div><script type="text/javascript" src="js/vue.js"></script><script type="text/javascript">/*簡單計算器案例 */var vm = new Vue({el: '#app',data: {a: '',b: '',result: ''},methods: {handle: function(){// 實(shí)現(xiàn)計算邏輯this.result = parseInt(this.a) + parseInt(this.b);}}});</script> </body> </html>v-bind
v-bind和v-model的區(qū)別
https://www.cnblogs.com/LFxanla/p/11601420.html
https://www.cnblogs.com/xuzhudong/p/8617487.html
- v-bind 指令被用來響應(yīng)地更新 HTML 屬性
- v-bind:href 可以縮寫為 :href;
綁定對象
- 我們可以給v-bind:class 一個對象,以動態(tài)地切換class。
- 注意:v-bind:class指令可以與普通的class特性共存
綁定class
2、 v-bind 中支持綁定一個數(shù)組 數(shù)組中classA和 classB 對應(yīng)為data中的數(shù)據(jù)這里的classA 對用data 中的 classA 這里的classB 對用data 中的 classB <ul class="box" :class="[classA, classB]"><li>學(xué)習(xí)Vue</li><li>學(xué)習(xí)Node</li><li>學(xué)習(xí)React</li> </ul> <script> var vm= new Vue({el:'.box',data:{classA:‘textColor‘,classB:‘textSize‘} }) </script> <style>.box{border:1px dashed #f0f;}.textColor{color:#f00;background-color:#eef;}.textSize{font-size:30px;font-weight:bold;} </style>綁定對象和綁定數(shù)組 的區(qū)別
- 綁定對象的時候 對象的屬性 即要渲染的類名 對象的屬性值對應(yīng)的是 data 中的數(shù)據(jù)
- 綁定數(shù)組的時候數(shù)組里面存的是data 中的數(shù)據(jù)
綁定style
<div v-bind:style="styleObject">綁定樣式對象</div>'<!-- CSS 屬性名可以用駝峰式 (camelCase) 或短橫線分隔 (kebab-case,記得用單引號括起來) --><div v-bind:style="{ color: activeColor, fontSize: fontSize,background:'red' }">內(nèi)聯(lián)樣式</div><!--組語法可以將多個樣式對象應(yīng)用到同一個元素 --> <div v-bind:style="[styleObj1, styleObj2]"></div><script>new Vue({el: '#app',data: {styleObject: {color: 'green',fontSize: '30px',background:'red'},activeColor: 'green',fontSize: "30px"},styleObj1: {color: 'red'},styleObj2: {fontSize: '30px'}</script>分支結(jié)構(gòu)
v-if 使用場景
- 1- 多個元素 通過條件判斷展示或者隱藏某個元素?;蛘叨鄠€元素
- 2- 進(jìn)行兩個視圖之間的切換
v-show 和 v-if的區(qū)別
- v-show本質(zhì)就是標(biāo)簽display設(shè)置為none,控制隱藏
- v-show只編譯一次,后面其實(shí)就是控制css,而v-if不停的銷毀和創(chuàng)建,故v-show性能更好一點(diǎn)。
- v-if是動態(tài)的向DOM樹內(nèi)添加或者刪除DOM元素
- v-if切換有一個局部編譯/卸載的過程,切換過程中合適地銷毀和重建內(nèi)部的事件監(jiān)聽和子組件
循環(huán)結(jié)構(gòu)
v-for
- 用于循環(huán)的數(shù)組里面的值可以是對象,也可以是普通元素
- 不推薦同時使用 v-if 和 v-for
- 當(dāng) v-if 與 v-for 一起使用時,v-for 具有比 v-if 更高的優(yōu)先級。
- key 的作用
- key來給每個節(jié)點(diǎn)做一個唯一標(biāo)識
- key的作用主要是為了高效的更新虛擬DOM
案例選項(xiàng)卡
1、 HTML 結(jié)構(gòu)
`<div id="app"><div class="tab"><!-- tab欄 --><ul><li class="active">apple</li><li class="">orange</li><li class="">lemon</li></ul><!-- 對應(yīng)顯示的圖片 --><div class="current"><img src="img/apple.png"></div><div class=""><img src="img/orange.png"></div><div class=""><img src="img/lemon.png"></div></div></div>`2、 提供的數(shù)據(jù)
list: [{id: 1,title: 'apple',path: 'img/apple.png'}, {id: 2,title: 'orange',path: 'img/orange.png'}, {id: 3,title: 'lemon',path: 'img/lemon.png'}]3、 把數(shù)據(jù)渲染到頁面
-
把tab欄 中的數(shù)替換到頁面上
- 把 data 中 title 利用 v-for 循環(huán)渲染到頁面上
- 把 data 中 path利用 v-for 循環(huán)渲染到頁面上
4、 給每一個tab欄添加事件,并讓選中的高亮
-
4.1 、讓默認(rèn)的第一項(xiàng)tab欄高亮
- tab欄高亮 通過添加類名active 來實(shí)現(xiàn) (CSS active 的樣式已經(jīng)提前寫好)
- 在data 中定義一個 默認(rèn)的 索引 currentIndex 為 0
- 給第一個li 添加 active 的類名
- 通過動態(tài)綁定class 來實(shí)現(xiàn) 第一個li 的索引為 0 和 currentIndex 的值剛好相等
- currentIndex === index 如果相等 則添加類名 active 否則 添加 空類名
- tab欄高亮 通過添加類名active 來實(shí)現(xiàn) (CSS active 的樣式已經(jīng)提前寫好)
-
4.2 、讓默認(rèn)的第一項(xiàng)tab欄對應(yīng)的div 顯示
- 實(shí)現(xiàn)思路 和 第一個 tab 實(shí)現(xiàn)思路一樣 只不過 這里控制第一個div 顯示的類名是 current
-
4.3 、點(diǎn)擊每一個tab欄 當(dāng)前的高亮 其他的取消高亮
-
給每一個li添加點(diǎn)擊事件
-
讓當(dāng)前的索引 index 和 當(dāng)前 currentIndex 的 值 進(jìn)項(xiàng)比較
-
如果相等 則當(dāng)前l(fā)i 添加active 類名 當(dāng)前的 li 高亮 當(dāng)前對應(yīng)索引的 div 添加 current 當(dāng)前div 顯示 其他隱藏
<div id="app"><div class="tab"><ul><!-- 通過v-on 添加點(diǎn)擊事件 需要把當(dāng)前l(fā)i 的索引傳過去 --><li v-on:click='change(index)' :class='currentIndex==index?"active":""' :key='item.id' v-for='(item,index) in list'>{{item.title}}</li></ul><div :class='currentIndex==index?"current":""' :key='item.id' v-for='(item, index) in list'><img :src="item.path"></div></div></div><script>new Vue({el: '#app',data: {currentIndex: 0, // 選項(xiàng)卡當(dāng)前的索引 默認(rèn)為 0 list: [{id: 1,title: 'apple',path: 'img/apple.png'}, {id: 2,title: 'orange',path: 'img/orange.png'}, {id: 3,title: 'lemon',path: 'img/lemon.png'}]},methods: {change: function(index) {// 通過傳入過來的索引來讓當(dāng)前的 currentIndex 和點(diǎn)擊的index 值 相等 // 從而實(shí)現(xiàn) 控制類名 this.currentIndex = index;}}})</script>
-
總結(jié)
以上是生活随笔為你收集整理的vue-day01-vue模板语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络学习笔记-目录(更新日期:20
- 下一篇: vue-day04-vue前端交互