Vue 2.0 由淺入深-指令

指令

指令是可以寫在DOM元素的小命令挪拟,他們以v-為前綴,Vue就能識別這是一個指令并保持語法的一致性击你。如果你需要對HTML進行底層操作的話玉组,這種方式是非常有用的。

1. v-text

v-text 更新元素的文本內(nèi)容丁侄,不解析html 相當(dāng)于更新元素的 innerText文本內(nèi)容

html 代碼

<div v-text='txt'></div>

javascript 代碼

new Vue({
  el:"#app",
  data:{
    txt:"<b>b標(biāo)簽</b>"
  } 
})

頁面渲染結(jié)果(不解析b標(biāo)簽惯雳,原格式輸出)
<b>b標(biāo)簽</b>

2. v-html

v-text 更新元素的html,解析html 相當(dāng)于更新元素的 innerHTMLhtml代碼內(nèi)容

html 代碼

<div v-text='html'></div>

javascript 代碼

new Vue({
  el:"#app",
  data:{
    html:"<b>b標(biāo)簽</b>"
  } 
})

頁面渲染結(jié)果(解析b標(biāo)簽輸出加粗的文本)
b標(biāo)簽

查看演示

3. v-show

v-show 根據(jù)表達式之真假值鸿摇,切換元素的 display CSS 屬性,元素即使隱藏也存在DOM中

html 代碼

<div v-show='flag'></div> 根據(jù)flag的布爾值切換 元素的display

javascript 代碼

new Vue({
  el:"#app",
  data:{
    flage:true
  } 
})

頁面渲染結(jié)果
此時 div 的display css 不做改變石景,v-show只會在表達式 為 false 時 改變display=none,為true不做改變

4. v-if

v-if 根據(jù)表達式的值的真假條件渲染元素,也就是說元素會被銷毀重新創(chuàng)建

html 代碼

<div v-if='flag'></div> 根據(jù)flag的布爾值拙吉,來控制元素是否被 創(chuàng)建或銷毀潮孽,銷毀后不再存在DOM中

javascript 代碼

new Vue({
  el:"#app",
  data:{
    flage:false
  } 
})

頁面渲染結(jié)果
此時 div 的將不被渲染出來,div 不存在于 DOM中

5. v-else

v-else v-if的else語句 代表表達式為false 的時候渲染元素
v-else 元素必須緊跟在帶 v-if 或者 v-else-if 的元素的后面庐镐,否則它將不會被識別恩商。

html 代碼

<div v-if='flag'>A</div>  如果flage為 `trun`則創(chuàng)建元素
<div v-else='flag'>B</div>  如果flage為`false`則創(chuàng)建元素

javascript 代碼

new Vue({
  el:"#app",
  data:{
    flage:false
  } 
})

頁面渲染結(jié)果
此時 div B 將被創(chuàng)建

6. v-else-if

v-else-if v-if的else-if語句
v-else-if 元素必須緊跟在帶 v-if的元素的后面,否則它將不會被識別必逆。

html 代碼

<div v-if="type === 'A'"> 如果type == A 則創(chuàng)建 divA元素 并中斷執(zhí)行
  A
</div>
<div v-else-if="type === 'B'"> 如果type == B 則創(chuàng)建 divA元素 并中斷執(zhí)行
  B
</div>
<div v-else-if="type === 'C'"> 如果type == C 則創(chuàng)建 divA元素 并中斷執(zhí)行
  C
</div>
<div v-else>  如果條件都不滿足 執(zhí)行
  Not A/B/C
</div>

javascript 代碼

new Vue({
  el:"#app",
  data:{
    type:'C'
  } 
})

頁面渲染結(jié)果
此時 div c 將被創(chuàng)建

v-show與v-if 實例演示

7. v-for

v-for 基于源數(shù)據(jù)多次渲染元素或模板塊

創(chuàng)建 vue實例

new Vue({
  el:"#app",
  data:{
    arr:["張","王","李","趙"],
    arr2:["張","王","李","張"],
    obj:{'key1' : 'val1','key2' : 'val2','key3' : 'val3'}
  },
})

輸出數(shù)組arr

//輸出arr 的值
<span v-for(val in arr)>{{val}}</span >
張 王 李 趙
//輸出 arr 的下標(biāo)和值 (第一個參數(shù)是val  第二個是key)
<span v-for((val,index) in arr)>{{index}}:{{val}}</span >
0:張  1:王  2:李  3:趙

輸出對象obj

//輸出obj的值
<span v-for(val in obj)>{{val}}</span >
val1   val2   val3
//輸出 obj的key 和 val (第一個參數(shù)是val  第二個是key)
<span v-for((val,key) in obj)>{{key}}:{{val}}</span >
key1:val1   key2:val2   key3:val3

vue 2.0 可以輸出對象重復(fù)的對象 比如 arr2 有兩個 張

//輸出obj的值
<span v-for(val in arr2)>{{val}}</span >
張 王 李 張

當(dāng)我們在使用v-for進行渲染時,盡可能使用渲染元素自身屬性的id給渲染的元素綁定一個 唯一key值,這樣在當(dāng)前渲染元素的DOM結(jié)構(gòu)發(fā)生變化時名眉,能夠單獨響應(yīng)該元素而不觸發(fā)所有元素的渲染粟矿。提高性能

<span v-for((val,index) in arr2) :key='index'>{{val}}</span >
張 王 李 張

查看v-for實例演示

8. v-on

v-on 用來綁定事件 用法 v-on:事件="函數(shù)";函數(shù)可傳入$event參數(shù)獲取事件對象

<div id="app">
   <button v-on:click="push($event)">點擊</button> //點擊button執(zhí)行push方法
   {{arr}} //展示數(shù)據(jù)
</div>
<script type="text/javascript">
var vm = new Vue({
    el:"#app",
    data:{
        arr:[1,2,3,4,5] //定義數(shù)據(jù)
    },
    methods:{  //事件方法 定義在 methods 選項中
        push:function(e){
            //輸出 event 事件對象
            console.log(e)
            //方法里的this 代表vue實例
            this.arr.push(6)  //向數(shù)組追加數(shù)據(jù)
        }
    }
})

v-on可以簡寫為@

<button v-on:click="test">v-on</button>
<button @click="test">@</button>

$event.target 獲取當(dāng)前dom對象

new Vue({
    el:"#app",
    methods:{
        test2:function(e){
            alert(e.target.innerHTML) //彈出當(dāng)前元素的內(nèi)容
        }
    },
})

查看v-on演示

8. 1事件修飾符

  • .stop

阻止冒泡
原生阻止冒泡方式需要先獲取事件對象 然后通過 e.stop.proPagation()來阻止冒泡

//原生:
function(e){
   e.stopPropagation()
}
//Vue: @事件.stop="執(zhí)行方法"
<button @click.stop="c2"></button>
  • .prevent

阻止默認事件
原生方式损拢,通過事件對象 e.preventDefault()

//原生:
function(e){
   e.preventDefault()
}
//Vue: @事件.prevent ="執(zhí)行方法"
<a  target="_blank" @click.prevent="d"></a>
  • .capture

添加事件監(jiān)聽器時使用事件捕獲模式
通俗的說陌粹,冒泡是由內(nèi)而外,如果外面元素添加 capture 則優(yōu)先先執(zhí)行福压;

<div id="obj1" v-on:click.capture="doc">
    obj1
    <div id="obj2" v-on:click.capture="doc">
        obj2
        <div id="obj3" v-on:click="doc">
            obj3
            <div id="obj4" v-on:click="doc">
                obj4
            </div>
        </div>
    </div>
</div>

點擊obj4的時候掏秩,彈出的順序為:obj1、obj2荆姆、obj4蒙幻、obj3; 由于1胆筒,2有修飾符邮破,故而先觸發(fā)事件,然后就是4本身觸發(fā)仆救,最后冒泡事件抒和。

查看事件修飾符實例演示

9. v-bind

v-bind 綁定DOM屬性 可以簡寫為 “ : ”

創(chuàng)建vue實例

new Vue({
    el:"#app",
    data:{
        src:"https://cn.vuejs.org/images/logo.png",
        a:"a",
        b:"b",
        c:"c",
        ble:true
    }   
})

img標(biāo)簽綁定 src

<img :src="src"/>
//執(zhí)行結(jié)果 <img src="https://cn.vuejs.org/images/logo.png"/>

綁定元素class

<p :class="a"></p>
//執(zhí)行結(jié)果 <p class="a"></p>

根據(jù)條件綁定元素class

<p :class="{a:true}">:class="{類值:真就添加類假則不添加}"</p>
//執(zhí)行結(jié)果 <p class="a"></p>
<p :class="ble?a:b">:class="ble?a:b" 如果 ble為true 則添加a 否則添加b</p>

添加多個class名綁定class數(shù)組

<p :class="[a,b]">:class="[class1,class2]"</p>
//執(zhí)行結(jié)果 <p class="a b"></p>
<p :class="[a,{b:true}]">:class="[a,{b:true}]"</p>
//執(zhí)行結(jié)果<p class="a b"></p>
<p :class="[a,ble?c:b]">:class="[a,ble?c:b]" </p>
//執(zhí)行結(jié)果<p class="a c"></p>

查看v-bind實例演示

9. v-model

v-model指令,他能輕松實現(xiàn)表單輸入和應(yīng)用狀態(tài)之間的雙向綁定彤蔽。

input文本框

<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

textarea 文本框

<textarea v-model="message" placeholder="add multiple lines"></textarea>
<p>Message is: {{ message }}</p>

復(fù)選框
單個復(fù)選框綁定布爾值

//html
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
//js
new Vue({
    el:'#app',
    data:{
        checked :false,
    }
})

多個復(fù)選框綁定數(shù)組

<div id='example-3'>
  <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
  <label for="jack">Jack</label>
  <input type="checkbox" id="john" value="John" v-model="checkedNames">
  <label for="john">John</label>
  <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
  <label for="mike">Mike</label>
  <br>
  <span>Checked names: {{ checkedNames }}</span>
</div>
//js
new Vue({
    el:'#example-3',
    data:{
        checkedNames:[],
    }
})

綁定單選框 綁定字符串

<div id="example-4">
  <input type="radio" id="one" value="One" v-model="picked">
  <label for="one">One</label>
  <br>
  <input type="radio" id="two" value="Two" v-model="picked">
  <label for="two">Two</label>
  <br>
  <span>Picked: {{ picked }}</span>
</div>
//js
new Vue({
    el:'#example-3',
    data:{
        picked:'',
    }
})

下拉框
v-model 作用在下拉框時要綁定給select 標(biāo)簽上摧莽,而不是 option,單選項是綁定字符串 多選項綁定數(shù)組

<select v-model="message5" name="">
  <option value="數(shù)據(jù)1" selected="selected">數(shù)據(jù)1</option>
  <option value="數(shù)據(jù)2">數(shù)據(jù)2</option>
</select>

new Vue({
el:'#app',
data:{
    message5:"數(shù)據(jù)1"
}
})

查看v-model演示案例

10 v-pre

跳過這個元素和它的子元素的編譯過程顿痪∧髟可以用來顯示原始 Mustache 標(biāo)簽。跳過大量沒有指令的節(jié)點會加快編譯员魏。

不在進行vue編譯丑蛤,直接以源格式輸出

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

輸出出來: {{ this will not be compiled }}

查看v-pre實例演示

11 v-cloak

vue實例未編譯完成前 帶有 v-cloak指令的元素都是隱藏的直到編譯結(jié)束,這樣有效的避免了 {{}} 閃爍的問題。
需要配合 css使用 先定義css [v-cloak] {display: none;}

<style type="text/css">
[v-cloak] {
  display: none;
}
</style>
<p v-cloak>{{msg}}</p>

查看v-cloak演示

12 v-once

這個指令撕阎,只渲染元素和組件一次受裹,之后數(shù)據(jù)改變時 插值處的內(nèi)容不會改變

查看v-once實例演示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市虏束,隨后出現(xiàn)的幾起案子棉饶,更是在濱河造成了極大的恐慌,老刑警劉巖镇匀,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件照藻,死亡現(xiàn)場離奇詭異,居然都是意外死亡汗侵,警方通過查閱死者的電腦和手機幸缕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門群发,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人发乔,你說我怎么就攤上這事熟妓。” “怎么了栏尚?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵起愈,是天一觀的道長。 經(jīng)常有香客問我译仗,道長抬虽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任纵菌,我火速辦了婚禮阐污,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘产艾。我一直安慰自己疤剑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布闷堡。 她就那樣靜靜地躺著隘膘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杠览。 梳的紋絲不亂的頭發(fā)上弯菊,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音踱阿,去河邊找鬼管钳。 笑死,一個胖子當(dāng)著我的面吹牛软舌,可吹牛的內(nèi)容都是我干的才漆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼佛点,長吁一口氣:“原來是場噩夢啊……” “哼醇滥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起超营,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盟榴,失蹤者是張志新(化名)和其女友劉穎赊抖,沒想到半個月后粘都,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柒巫,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年米碰,在試婚紗的時候發(fā)現(xiàn)自己被綠了窝革。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片购城。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖聊闯,靈堂內(nèi)的尸體忽然破棺而出工猜,到底是詐尸還是另有隱情米诉,我是刑警寧澤菱蔬,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站史侣,受9級特大地震影響拴泌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惊橱,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一蚪腐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧税朴,春花似錦回季、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至觅廓,卻和暖如春鼻忠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杈绸。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工帖蔓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞳脓。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓塑娇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親劫侧。 傳聞我的和親對象是個殘疾皇子埋酬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對于 Vue 1.0 印象不深的內(nèi)容板辽。關(guān)于...
    云之外閱讀 5,050評論 0 29
  • 前端開發(fā)面試題 <a name='preface'>前言</a> 只看問題點這里 看全部問題和答案點這里 本文由我...
    自you是敏感詞閱讀 761評論 0 3
  • 1.安裝 可以簡單地在頁面引入Vue.js作為獨立版本奇瘦,Vue即被注冊為全局變量,可以在頁面使用了劲弦。 如果希望搭建...
    Awey閱讀 11,024評論 4 129
  • UITableView是iOS開發(fā)中使用最頻繁耳标,也是最重要的視圖控件,在常用的APP中隨處可見。它繼承于UIScr...
    熱雪ss閱讀 3,191評論 3 13
  • 我站在一片郁郁蔥蔥的高山草甸里邑跪,欣賞著頭頂上的星辰次坡,盡情吐納著這難得的清新空氣呼猪,仿佛置身于天堂。我不知道自己為何深...
    草石閱讀 147評論 0 1