Vue.js指令

在Vue中有很多的指令蝇棉,這些指令方便了我們操作數(shù)據(jù)网严,下面我們來看一下在Vue中到底有哪些指令:

# v-text

更新元素的 textContent墓怀。如果要更新部分的 textContent呀闻,需要使用 {{}} 插值拇惋。

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

如上代碼,可見v-text并不是很常用陶舞,我們平時(shí)在更新textContent時(shí)直接用雙花括號(hào){{}}即可嗽测。

# v-html

更新元素的 innerHTML。注意:內(nèi)容按普通 HTML 插入 - 不會(huì)作為 Vue 模板進(jìn)行編譯肿孵。如果試圖使用 v-html 組合模板唠粥,可以重新考慮是否通過使用組件來替代。

<div id="app1">
    <p>{{ rawHtml }}</p>
    <p><span v-html="rawHtml"></span></p>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false;
    new Vue({
        el : '#app1',
        data : {
            rawHtml : '<span style="color: red">紅色</span>'
        }
    })
</script>

運(yùn)行結(jié)果.png

這個(gè) span 的內(nèi)容將會(huì)被替換成為 rawHtml停做,直接作為 HTML——會(huì)忽略解析屬性值中的數(shù)據(jù)綁定晤愧。注意,你不能使用 v-html 來復(fù)合局部模板蛉腌,因?yàn)?Vue 不是基于字符串的模板引擎官份。反之,對(duì)于用戶界面 (UI)烙丛,組件更適合作為可重用和可組合的基本單位舅巷。

# v-show

v-show 的元素始終會(huì)被渲染并保留在 DOM 中。v-show 只是簡(jiǎn)單地切換元素的 CSS property display河咽。

<h1 v-show="ok">Hello!</h1>
<script type="text/javascript">
    Vue.config.productionTip = false;
    new Vue({
        el : '#app1',
        data : {
            ok : true
        }
    })
</script>

# v-if钠右、v-else、v-else-if

v-if忘蟹、v-else飒房、v-else-if會(huì)改變頁面的DOM結(jié)構(gòu)搁凸,如果頻繁使用這些來進(jìn)行頁面上的顯示隱藏,就會(huì)導(dǎo)致性能非常差情屹,但如果不是要頻繁切換的話坪仇,v-ifv-show更好。

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  Not A/B/C
</div>

# v-for

看名字就可以看出v-for是有關(guān)循環(huán)的指令垃你。

<div v-for="item in items">
  {{ item.text }}
</div>

data : {
  items: [1,2,3,4]
}

另外也可以為數(shù)組索引指定別名 (或者用于對(duì)象的鍵):

<div v-for="(item, index) in items"></div>
<div v-for="(val, key) in object"></div>
<div v-for="(val, name, index) in object"></div>

v-for 的默認(rèn)行為會(huì)嘗試原地修改元素而不是移動(dòng)它們。要強(qiáng)制其重新排序元素喂很,你需要用特殊 attribute key 來提供一個(gè)排序提示:

<div v-for="item in items" :key="item.id">
  {{ item.text }}
</div>

當(dāng) v-ifv-for 一起使用時(shí)惜颇,v-for 具有比 v-if 更高的優(yōu)先級(jí)。

# v-on

一般來說少辣,我們?yōu)榱朔奖銜?huì)把v-on可以縮寫為@凌摄,它的用法如下:

綁定事件監(jiān)聽器。事件類型由參數(shù)指定漓帅。表達(dá)式可以是一個(gè)方法的名字或一個(gè)內(nèi)聯(lián)語句锨亏,如果沒有修飾符也可以省略。
用在普通元素上時(shí)忙干,只能監(jiān)聽原生 DOM 事件器予。用在自定義元素組件上時(shí),也可以監(jiān)聽子組件觸發(fā)的自定義事件捐迫。
在監(jiān)聽原生 DOM 事件時(shí)乾翔,方法以事件為唯一的參數(shù)。如果使用內(nèi)聯(lián)語句施戴,語句可以訪問一個(gè) $event property:v-on:click="handle('ok', $event)"反浓。

<!-- 方法處理器 -->
<button v-on:click="doThis"></button>

<!-- 動(dòng)態(tài)事件 (2.6.0+) -->
<button v-on:[event]="doThis"></button>

<!-- 內(nèi)聯(lián)語句 -->
<button v-on:click="doThat('hello', $event)"></button>

<!-- 縮寫 -->
<button @click="doThis"></button>

<!-- 動(dòng)態(tài)事件縮寫 (2.6.0+) -->
<button @[event]="doThis"></button>

<!-- 停止冒泡 -->
<button @click.stop="doThis"></button>

<!-- 阻止默認(rèn)行為 -->
<button @click.prevent="doThis"></button>

<!-- 阻止默認(rèn)行為,沒有表達(dá)式 -->
<form @submit.prevent></form>

<!--  串聯(lián)修飾符 -->
<button @click.stop.prevent="doThis"></button>

<!-- 鍵修飾符赞哗,鍵別名 -->
<input @keyup.enter="onEnter">

<!-- 鍵修飾符雷则,鍵代碼 -->
<input @keyup.13="onEnter">

<!-- 點(diǎn)擊回調(diào)只會(huì)觸發(fā)一次 -->
<button v-on:click.once="doThis"></button>

在子組件上監(jiān)聽自定義事件 (當(dāng)子組件觸發(fā)“my-event”時(shí)將調(diào)用事件處理器):

<my-component @my-event="handleThis"></my-component>

<!-- 內(nèi)聯(lián)語句 -->
<my-component @my-event="handleThis(123, $event)"></my-component>

<!-- 組件中的原生事件 -->
<my-component @click.native="onClick"></my-component>

# v-bind

通常在寫代碼的時(shí)候,為了使用方便肪笋,我們一般吧v-bind縮寫成 : 月劈,它的用法如下:

動(dòng)態(tài)地綁定一個(gè)或多個(gè) attribute,或一個(gè)組件 prop 到表達(dá)式涂乌。
在綁定 class 或 style attribute 時(shí)艺栈,支持其它類型的值,如數(shù)組或?qū)ο蟆?br> 在綁定 prop 時(shí)湾盒,prop 必須在子組件中聲明湿右。可以用修飾符指定不同的綁定類型罚勾。
沒有參數(shù)時(shí)毅人,可以綁定到一個(gè)包含鍵值對(duì)的對(duì)象吭狡。注意此時(shí) class 和 style 綁定不支持?jǐn)?shù)組和對(duì)象。

<!-- 綁定一個(gè) attribute -->
<img v-bind:src="imageSrc">

<!-- 動(dòng)態(tài) attribute 名 (2.6.0+) -->
<button v-bind:[key]="value"></button>

<!-- 縮寫 -->
<img :src="imageSrc">

<!-- 動(dòng)態(tài) attribute 名縮寫 (2.6.0+) -->
<button :[key]="value"></button>

<!-- 內(nèi)聯(lián)字符串拼接 -->
<img :src="'/path/to/images/' + fileName">

<!-- class 綁定 -->
<div :class="{ red: isRed }"></div>
<div :class="[classA, classB]"></div>
<div :class="[classA, { classB: isB, classC: isC }]">

<!-- style 綁定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div>

<!-- 綁定一個(gè)全是 attribute 的對(duì)象 -->
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>

<!-- 通過 prop 修飾符綁定 DOM attribute -->
<div v-bind:text-content.prop="text"></div>

<!-- prop 綁定丈莺』螅“prop”必須在 my-component 中聲明。-->
<my-component :prop="someThing"></my-component>

<!-- 通過 $props 將父組件的 props 一起傳給子組件 -->
<child-component v-bind="$props"></child-component>

# v-model

在表單控件或者組件上創(chuàng)建雙向綁定缔俄。

v-model 在內(nèi)部為不同的輸入元素使用不同的 property 并拋出不同的事件:
1弛秋、text 和 textarea 元素使用 value property 和 input 事件;
2俐载、checkbox 和 radio 使用 checked property 和 change 事件蟹略;
3、select 字段將 value 作為 prop 并將 change 作為事件遏佣。

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

<!-- 多行文本 -->
<span>Multiline message is:</span>
<p style="white-space: pre-line;">{{ message }}</p>
<br>
<textarea v-model="message" placeholder="add multiple lines"></textarea>

<!-- 復(fù)選框 -->
<!-- 單個(gè)復(fù)選框挖炬,綁定到布爾值 -->
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
<!-- 多個(gè)復(fù)選框,綁定到同一個(gè)數(shù)組 -->
<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>

new Vue({
  el: '...',
  data: {
    checkedNames: []
  }
})
<!-- ---------------------- -->
<input
  type="checkbox"
  v-model="toggle"
  true-value="yes"
  false-value="no"
>
// 當(dāng)選中時(shí)
vm.toggle === 'yes'
// 當(dāng)沒有選中時(shí)
vm.toggle === 'no'

<!-- 單選按鈕 -->
<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>

new Vue({
  el: '#example-4',
  data: {
    picked: ''
  }
})

<input type="radio" v-model="pick" v-bind:value="a">
<!-- ---------------------- -->
// 當(dāng)選中時(shí)
vm.pick === vm.a

<!-- 選擇框 -->
<div id="example-6">
  <select v-model="selected" multiple style="width: 50px;">
    <option>A</option>
    <option>B</option>
    <option>C</option>
  </select>
  <br>
  <span>Selected: {{ selected }}</span>
</div>

new Vue({
  el: '#example-6',
  data: {
    selected: []
  }
})
<!-- ---------------------- -->
<select v-model="selected">
    <!-- 內(nèi)聯(lián)對(duì)象字面量 -->
  <option v-bind:value="{ number: 123 }">123</option>
</select>
// 當(dāng)選中時(shí)
typeof vm.selected // => 'object'
vm.selected.number // => 123

<!-- 用 v-for 渲染的動(dòng)態(tài)選項(xiàng) -->

<select v-model="selected">
  <option v-for="option in options" v-bind:value="option.value">
    {{ option.text }}
  </option>
</select>
<span>Selected: {{ selected }}</span>

new Vue({
  el: '...',
  data: {
    selected: 'A',
    options: [
      { text: 'One', value: 'A' },
      { text: 'Two', value: 'B' },
      { text: 'Three', value: 'C' }
    ]
  }
})

# v-slot

提供具名插槽或需要接收 prop 的插槽状婶。

<!-- 具名插槽 -->
<base-layout>
  <template v-slot:header>
    Header content
  </template>

  Default slot content

  <template v-slot:footer>
    Footer content
  </template>
</base-layout>

<!-- 接收 prop 的具名插槽 -->
<infinite-scroll>
  <template v-slot:item="slotProps">
    <div class="item">
      {{ slotProps.item.text }}
    </div>
  </template>
</infinite-scroll>

<!-- 接收 prop 的默認(rèn)插槽意敛,使用了解構(gòu) -->
<mouse-position v-slot="{ x, y }">
  Mouse position: {{ x }}, {{ y }}
</mouse-position>

# v-pre

跳過這個(gè)元素和它的子元素的編譯過程√懦妫可以用來顯示原始 {{}} 標(biāo)簽草姻。跳過大量沒有指令的節(jié)點(diǎn)會(huì)加快編譯。

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

# v-cloak

這個(gè)指令保持在元素上直到關(guān)聯(lián)實(shí)例結(jié)束編譯走敌。和 CSS 規(guī)則如 [v-cloak] { display: none } 一起用時(shí)碴倾,這個(gè)指令可以隱藏未編譯的 {{}}標(biāo)簽直到實(shí)例準(zhǔn)備完畢。

[v-cloak] {
  display: none;
}
<div v-cloak>
  {{ message }}
</div>

不會(huì)顯示掉丽,直到編譯結(jié)束跌榔。

# v-once

只渲染元素和組件一次。隨后的重新渲染捶障,元素/組件及其所有的子節(jié)點(diǎn)將被視為靜態(tài)內(nèi)容并跳過僧须。這可以用于優(yōu)化更新性能。

<!-- 單個(gè)元素 -->
<span v-once>This will never change: {{msg}}</span>
<!-- 有子元素 -->
<div v-once>
  <h1>comment</h1>
  <p>{{msg}}</p>
</div>
<!-- 組件 -->
<my-component v-once :comment="msg"></my-component>
<!-- `v-for` 指令-->
<ul>
  <li v-for="i in list" v-once>{{i}}</li>
</ul>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末项炼,一起剝皮案震驚了整個(gè)濱河市担平,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锭部,老刑警劉巖暂论,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拌禾,居然都是意外死亡取胎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闻蛀,“玉大人匪傍,你說我怎么就攤上這事【跬矗” “怎么了役衡?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)薪棒。 經(jīng)常有香客問我手蝎,道長(zhǎng),這世上最難降的妖魔是什么俐芯? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任柑船,我火速辦了婚禮,結(jié)果婚禮上泼各,老公的妹妹穿的比我還像新娘。我一直安慰自己亏拉,他們只是感情好扣蜻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著及塘,像睡著了一般莽使。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笙僚,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天芳肌,我揣著相機(jī)與錄音,去河邊找鬼肋层。 笑死亿笤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的栋猖。 我是一名探鬼主播净薛,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蒲拉!你這毒婦竟也來了肃拜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤雌团,失蹤者是張志新(化名)和其女友劉穎燃领,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锦援,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猛蔽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雨涛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枢舶。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡懦胞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凉泄,到底是詐尸還是另有隱情躏尉,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布后众,位于F島的核電站胀糜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蒂誉。R本人自食惡果不足惜教藻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望右锨。 院中可真熱鬧寨腔,春花似錦、人聲如沸素征。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蹂窖。三九已至轧抗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞬测,已是汗流浹背横媚。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留月趟,地道東北人灯蝴。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像狮斗,于是被迫代替她去往敵國(guó)和親绽乔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • 最近開始學(xué)習(xí)Vue.js,除了默認(rèn)設(shè)置的核心指令( v-model 和 v-show ), Vue 也允許注冊(cè)自定...
    趙客縵胡纓v吳鉤霜雪明閱讀 496評(píng)論 0 5
  • 我在這里學(xué)習(xí)內(nèi)置指令 v-model v-if v-show v-else v-for v-bind v-on v...
    努力努力的老姑娘閱讀 414評(píng)論 0 1
  • 入門程序 1碳褒、在表單控件中使用v-model=“” 可實(shí)現(xiàn)雙向綁定2折砸、vue指令都是 v-xxx格式的 v-clo...
    金石_832e閱讀 261評(píng)論 0 0
  • 指令用在我們的html中。 指令 (Directives) 是帶有v-前綴的特殊特性沙峻。指令特性的值預(yù)期是單個(gè) Ja...
    Rising_life閱讀 441評(píng)論 0 3