Vue第一天指令、修飾符、事件

1、vue的概念和特點(diǎn):

vue是一套用于構(gòu)建用戶(hù)界面的漸進(jìn)式JavaScript框架

易用:在有HTML,CSS,JavaScript的基礎(chǔ)上,快速上手。

靈活:簡(jiǎn)單小巧的核心,漸進(jìn)式技術(shù)棧,足以應(yīng)付任何規(guī)模的應(yīng)用。

性能:20kb min+gzip 運(yùn)行大小、超快虛擬 DOM 、最省心的優(yōu)化

2、vue的基本使用:

提供填充數(shù)據(jù)的標(biāo)簽

引入vue.js文件

使用vue.js語(yǔ)法做功能

vue提供的數(shù)據(jù)填充到標(biāo)簽

實(shí)例參數(shù)分析:

el:元素的掛載位置(值可以是css選擇器或者DOM元素)

data:模型數(shù)據(jù)

{{}}差值表達(dá)式:將數(shù)據(jù)填充到html;做一些簡(jiǎn)單的計(jì)算操作

vue代碼運(yùn)行的原理:編譯過(guò)程的概念(vue語(yǔ)法>原生語(yǔ)法)

3、vue基礎(chǔ)指令:

指令的本質(zhì)就是自定義屬性

v-cloak:防止頁(yè)面加載時(shí)出現(xiàn)閃爍問(wèn)題

[v-cloak] {
 display: none;
}

<div v-cloak>
 {{ message }}
</div>

原理:先通過(guò)css將其隱藏,然后在通過(guò)內(nèi)存中進(jìn)行值替換,替換好之后顯示效果

v-text:指令用于將數(shù)據(jù)填充到標(biāo)簽中,作用于插值表達(dá)式類(lèi)似,但是沒(méi)有閃動(dòng)問(wèn)題

如果數(shù)據(jù)中有HTML標(biāo)簽會(huì)將html標(biāo)簽一并輸出

此處為單向綁定,數(shù)據(jù)對(duì)象上的值改變,插值會(huì)發(fā)生變化;但是當(dāng)插值發(fā)生變化并不會(huì)影響數(shù)據(jù)對(duì)象的值

<span v-text="msg"></span>
<!-- 和下面的一樣 -->
<span>{{msg}}</span>

v-html:用法和v-text 相似 但是他可以將HTML片段填充到標(biāo)簽中

可能有安全問(wèn)題, 一般只在可信任內(nèi)容上使用 v-html,永不用在用戶(hù)提交的內(nèi)容上

它與v-text區(qū)別在于v-text輸出的是純文本,瀏覽器不會(huì)對(duì)其再進(jìn)行html解析,但v-html會(huì)將其當(dāng)html標(biāo)簽解析后輸出。

<div v-html="html"></div>

v-pre:顯示原始信息跳過(guò)編譯過(guò)程

跳過(guò)這個(gè)元素和它的子元素的編譯過(guò)程。

一些靜態(tài)的內(nèi)容不需要編譯加這個(gè)指令可以加快渲染

<span v-pre>{{ this will not be compiled }}</span>

v-once:執(zhí)行一次性的插值【當(dāng)數(shù)據(jù)改變時(shí),插值處的內(nèi)容不會(huì)繼續(xù)更新】

v-module:本質(zhì)

綁定數(shù)據(jù)value 觸發(fā)輸入事件input

<!--解決經(jīng)常刷新出現(xiàn)花括號(hào) -->
 <div v-cloak>{{msg}}</div>
 <input type="text" v-bind:value="msg" v-on:input="handle" >
 <!-- 簡(jiǎn)寫(xiě)版 -->
 <input type="text" :value="msg" @input="handle">
 <input type="text" v-bind:value="msg"  v-on:input='msg=$event.target.value'>
 <!-- 簡(jiǎn)寫(xiě)版 -->
 <input type="text" :value="msg"  @input='msg=$event.target.value'>
 <!-- v-model -->
 <input type="text" value="" v-model='msg'>

v-on

  • 用來(lái)綁定事件的

  • 形式如:v-on:click 縮寫(xiě)為 @click;

<button v-on:click='handle1'>點(diǎn)擊1</button>
//帶參數(shù)
<button v-on:click='handle2(123, 456, $event)'>點(diǎn)擊2</button>

v-bind

  • v-bind 指令被用來(lái)響應(yīng)地更新 HTML 屬性

  • v-bind:href 可以縮寫(xiě)為 :href;

<!-- 綁定一個(gè)屬性 -->
<img v-bind:src="imageSrc">
<!-- 縮寫(xiě) -->
<img :src="imageSrc">

綁定對(duì)象操作css:

<!-- v-bind:class="{css類(lèi)名:對(duì)象名}" -->
<!-- 案例 -->
<div v-bind:class="{active:IsShow,error:Iserror}">通過(guò)true來(lái)控制類(lèi)名</div>
data: {
 IsShow:true,
 Iserror:true
 }

綁定數(shù)組操作css:

<!-- v-bind:class="[別名A,別名B]" -->
<ul class="box" :class="[classA, classB]">
 <li>學(xué)習(xí)Vue</li>
 <li>學(xué)習(xí)Node</li>
 <li>學(xué)習(xí)React</li>
</ul>
data:{
 別名:'css屬性'
 classA:‘textColor‘,
 classB:‘textSize‘
 }

混合使用操作css:

<div v-bind:class="[a,b,{test:Istest}]">12314</div>
data: {
 a:'active',
 b:'error',
 Istest:true
 }

綁定對(duì)象和綁定數(shù)組 的區(qū)別

  • 綁定對(duì)象的時(shí)候 對(duì)象的屬性 即要渲染的類(lèi)名 對(duì)象的屬性值對(duì)應(yīng)的是 data 中的數(shù)據(jù)

  • 綁定數(shù)組的時(shí)候數(shù)組里面存的是data 中的數(shù)據(jù)

綁定數(shù)組操作style:

<div v-bind:style="{height:h,width:w,border:b}">124</div>
<div v-bind:style="objstyle">66</div>
<div v-bind:style="[objstyle,overrideStyles]">88</div>
data: {
 h:'150px',
 w:'190px',
 b:'1px solid blue',
 objstyle:{
 height:'150px',width:'190px',border:'1px solid blue'
 },
 overrideStyles: {
 border: '5px solid orange',
 backgroundColor: 'blue'
 }
 }

v-if

使用場(chǎng)景

  • 1- 多個(gè)元素 通過(guò)條件判斷展示或者隱藏某個(gè)元素?;蛘叨鄠€(gè)元素

  • 2- 進(jìn)行兩個(gè)視圖之間的切換

 <div v-if="score>=90">優(yōu)秀</div>
 <div v-else-if="score<90&&score>=80">良好</div>
 <div v-else-if="score<80&&score>60">一般</div>
 <div v-else>比較差</div>
 <div v-show="flag">顯示</div>
 <button v-on:click='handle'>點(diǎn)擊</button>
 </div>
 <script type="text/javascript" src="js/vue.js"></script>
 <script type="text/javascript">
 /*
 分支結(jié)構(gòu)

 v-show的原理:控制元素樣式是否顯示 display:none
 */
 var vm = new Vue({
 el: '#app',
 data: {
 score: 80,
 flag:true
 },
 methods: {
 handle: function(){
 this.flag=!this.flag
 }
 }
 });
 </script>

v-show 和 v-if的區(qū)別

  • v-show本質(zhì)就是標(biāo)簽display設(shè)置為none,控制隱藏

    • v-show只編譯一次,后面其實(shí)就是控制css,而v-if不停的銷(xiāo)毀和創(chuàng)建,故v-show性能更好一點(diǎn)。
  • v-if是動(dòng)態(tài)的向DOM樹(shù)內(nèi)添加或者刪除DOM元素

    • v-if切換有一個(gè)局部編譯/卸載的過(guò)程,切換過(guò)程中合適地銷(xiāo)毀和重建內(nèi)部的事件監(jiān)聽(tīng)和子組件

v-for

  • 用于循環(huán)的數(shù)組里面的值可以是對(duì)象,也可以是普通元素
<!--  循環(huán)結(jié)構(gòu)-遍歷對(duì)象
 v 代表   對(duì)象的value
 k  代表對(duì)象的 鍵 
 i  代表索引 
 ---> 
 <div v-if='v==13' v-for='(v,k,i) in obj'>{{v + '---' + k + '---' + i}}</div>

<!-- 循環(huán)結(jié)構(gòu)-遍歷數(shù)組  
 item 是我們自己定義的一個(gè)名字  代表數(shù)組里面的每一項(xiàng)
 items對(duì)應(yīng)的是 data中的數(shù)組-->
 <li v-for="item in items">
 {{ item.message }}
 </li> 

key 的作用

- key來(lái)給每個(gè)節(jié)點(diǎn)做一個(gè)唯一標(biāo)識(shí)
- key的作用主要是為了高效的更新虛擬DOM
<li v-for="item in items" :key="item.id">...</li>

4、雙向數(shù)據(jù)綁定:當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候,視圖也就發(fā)生變化;當(dāng)視圖發(fā)生變化的時(shí)候,數(shù)據(jù)也會(huì)跟著同步變化

5、MVVM設(shè)計(jì)思想

MVVM是前端視圖層的概念,主要關(guān)注于 視圖層分離,也就是說(shuō):MVVM把前端的視圖層,分為了 三部分 Model, View , VM ViewModel

m model

  • 數(shù)據(jù)層 Vue 中 數(shù)據(jù)層 都放在 data 里面

v view 視圖

  • Vue 中 view 即 我們的HTML頁(yè)面

vm (view-model) 控制器 將數(shù)據(jù)和視圖層建立聯(lián)系

  • m 即 Vue 的實(shí)例 就是 vm

6、事件修飾符

<!-- 阻止單擊事件繼續(xù)傳播 --> 
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重載頁(yè)面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修飾符可以串聯(lián)   即阻止冒泡也阻止默認(rèn)事件 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只當(dāng)在 event.target 是當(dāng)前元素自身時(shí)觸發(fā)處理函數(shù) -->
<!-- 即事件不是從內(nèi)部元素觸發(fā)的 -->
<div v-on:click.self="doThat">...</div>
使用修飾符時(shí),順序很重要;相應(yīng)的代碼會(huì)以同樣的順序產(chǎn)生。
因此,用 v-on:click.prevent.self 會(huì)阻止所有的點(diǎn)擊,
而 v-on:click.self.prevent 只會(huì)阻止對(duì)元素自身的點(diǎn)擊。

7、按鍵修飾符

監(jiān)聽(tīng)鍵盤(pán)事件

<!-- 只有在 `keyCode` 是 13 時(shí)調(diào)用 `vm.submit()` -->
<input v-on:keyup.13="submit">
<!-- -當(dāng)點(diǎn)擊enter 時(shí)調(diào)用 `vm.submit()` -->
<input v-on:keyup.enter="submit">
<!--當(dāng)點(diǎn)擊enter或者space時(shí)  時(shí)調(diào)用 `vm.alertMe()`   -->
<input type="text" v-on:keyup.enter.space="alertMe" >
常用的按鍵修飾符
.enter =>    enter鍵
.tab => tab鍵
.delete (捕獲“刪除”和“退格”按鍵) =>  刪除鍵
.esc => 取消鍵
.space =>  空格鍵
.up =>  上
.down =>  下
.left =>  左
.right =>  右

自定義按鍵修飾符別名
在Vue中可以通過(guò)config.keyCodes自定義按鍵修飾符別名

Vue.config.keyCodes.f5 = 116;
預(yù)先定義了keycode 116(即F5)的別名為f5,因此在文字輸入框中按下F5,會(huì)觸發(fā)prompt方法
<input type="text" v-on:keydown.f5="prompt()">

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容