Vue 指令

總結(jié)下vue的語(yǔ)法贰军,雖然文檔都能查到,但偏于教程不易查找蟹肘。

1.內(nèi)容綁定 {{}}

雙大括號(hào)綁定內(nèi)容词疼,微信小程序也是這樣。支持js表達(dá)式帘腹。
<div>{{message}}</div>

雙大括號(hào)輸出的僅是字符串寒跳,可以用v-html將其轉(zhuǎn)化為html代碼,類似危險(xiǎn)html操作竹椒。

2.元素屬性綁定 v-bind

v-bind:屬性名稱∶追可以縮寫成 :屬性名稱
可以將元素的屬性與vue實(shí)例的數(shù)據(jù)進(jìn)行單向綁定胸完,即:數(shù)據(jù)變化界面會(huì)刷新,但界面上的變化不會(huì)更新vue實(shí)例中的數(shù)據(jù)翘贮∩蘅可以用方括號(hào)實(shí)現(xiàn)動(dòng)態(tài)綁定。

示例

<input v-bind:value="message"/>
<input :value="message"/>
// 動(dòng)態(tài)綁定
<input v-bind:['value']="message"/>

2.5表單輸入雙向綁定 v-model

// 這樣在input框輸入內(nèi)容時(shí)候會(huì)一起修改vue實(shí)例中的message變量
<input v-model="message" placeholder="edit me">
// 其實(shí)上面這個(gè)v-model等同于一個(gè)v-bind與v-on組合
<input
  v-bind:value="searchText"
  v-on:input="searchText = $event.target.value"
>
// 自定義組件內(nèi)部需要有一個(gè)名為value的props狸页,并且將其綁定到自己的模板中某個(gè)輸入框的value屬性上锨能。
Vue.component('custom-input', {
  props: ['value'],
  template: `
    <input
      v-bind:value="value"
      v-on:input="$emit('input', $event.target.value)"
    >
  `
})
// 然后就可以使用v-model了
<custom-input  v-model="message" />
// 上面這個(gè)基于value屬性和input事件的綁定是默認(rèn)行為,可以通過(guò)在組件中加入model屬性進(jìn)行修改
Vue.component('base-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    checked: Boolean
  },
  template: `
    <input
      type="checkbox"
      v-bind:checked="checked"
      v-on:change="$emit('change', $event.target.checked)"
    >
  `
})

2.6 在自定義組件上使用v-model的問(wèn)題

注意是組件上芍耘,不是組件中址遇。類似react自定義組件中,將值通過(guò)props傳入組件斋竞,在組件內(nèi)部適當(dāng)時(shí)候通過(guò)callback的方式通知父組件倔约,然后父組件在setState改變這個(gè)值,然后由于setstate會(huì)刷新父組件坝初,最后修改過(guò)的值又傳回給子組件浸剩。這個(gè)過(guò)程在react中比較繁瑣。Vue中可以通過(guò)v-model簡(jiǎn)單實(shí)現(xiàn)鳄袍。但是有時(shí)候這種子組件可以改變父組件值的行為會(huì)產(chǎn)生一些問(wèn)題绢要,并且隱藏了改變的過(guò)程,有些時(shí)候希望在chagne的時(shí)候順便做些其他事情拗小,這種自動(dòng)的方式就不合適了重罪。

3.事件監(jiān)聽 v-on

v-on:事件名稱。可以縮寫成 @事件名稱
將元素的事件與vue實(shí)例的方法綁定蛆封。同樣支持動(dòng)態(tài)唇礁。

示例1 原生html元素的事件監(jiān)聽

<div v-on:click="sayHello" />
<div @click="sayHello" />
// 動(dòng)態(tài)
<div v-on:['click']="sayHello" />

示例2vue組件的事件監(jiān)聽
可以通過(guò)v-on:event-name 來(lái)監(jiān)聽vue組件中的事件,在被監(jiān)聽組件內(nèi)部通過(guò)this.$emit('event-name)發(fā)送事件惨篱,注意vue中推薦使用kebab-case的形式命名事件盏筐,不使用駝峰命名法,因?yàn)槎紩?huì)被轉(zhuǎn)為小寫砸讳。

<my-component v-on:my-event="doSomething"></my-component>
// 內(nèi)部emit發(fā)送事件琢融,可攜帶參數(shù)
Vue.component('base-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    checked: Boolean
  },
  template: `
    <input
      type="checkbox"
      v-bind:checked="checked"
      v-on:change="$emit('change', $event.target.checked)"
    >
  `
})

但是有時(shí)候僅僅想監(jiān)聽一下這個(gè)組件的click事件,這時(shí)候在組件內(nèi)部通過(guò)emit的方式就有點(diǎn)繁瑣了簿寂,這時(shí)候可以使用v-on的 .native修飾符漾抬。

<my-component v-on:click.native="onClick"></my-component>

注意這里只是監(jiān)聽了組件內(nèi)部根元素的事件,也就是說(shuō)根元素必須有這個(gè)事件常遂,如根元素是個(gè)div此時(shí)監(jiān)聽他的input事件是不行的纳令。

4.條件渲染 v-if 、v-else-if克胳、v-else與v-show

當(dāng)條件為truthy的時(shí)候才渲染一個(gè)模塊平绩。v-else-if、v-else必須緊根 v-if后面漠另,否則無(wú)效捏雌。

<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no ??</h1>

也可以一次性判斷多個(gè)模塊,外面套個(gè)template元素笆搓,這個(gè)template即看不見也不影響布局性湿,微信小程序里面同樣的元素叫做black。

<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

v-show與v-if差不多满败,區(qū)別是v-show不支持template也不支持else啥的肤频,最重要的是v-show和css中visibility屬性類似,元素即使不顯示的時(shí)候也占有空間算墨。

5.循環(huán)渲染 v-for

實(shí)現(xiàn)類似react中用基于某個(gè)數(shù)組使用map循環(huán)渲染一個(gè)列表的功能着裹。

// items是vue實(shí)例中的數(shù)據(jù)源,item是別名米同,index是索引骇扇。和react一樣這里最好給個(gè)唯一key,便于更新和重用面粮。
<ul id="example-2">
  <li v-for="(item, index) in items"  :key="item.id">
    {{ index }} - {{ item.message }}
  </li>
</ul>

// 也可以使用template
<ul>
  <template v-for="item in items">
    <li>{{ item.msg }}</li>
    <li class="divider" role="presentation"></li>
  </template>
</ul>

在vue組件上使用v-for的時(shí)候要把item作為屬性綁定到組件的prop少孝,item不會(huì)自動(dòng)傳進(jìn)組件。

// 組件內(nèi)有item index key三個(gè)props
<my-component
  v-for="(item, index) in items"
  v-bind:item="item"
  v-bind:index="index"
  v-bind:key="item.id"
></my-component>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末熬苍,一起剝皮案震驚了整個(gè)濱河市稍走,隨后出現(xiàn)的幾起案子袁翁,更是在濱河造成了極大的恐慌,老刑警劉巖婿脸,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粱胜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡狐树,警方通過(guò)查閱死者的電腦和手機(jī)焙压,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抑钟,“玉大人涯曲,你說(shuō)我怎么就攤上這事≡谒” “怎么了幻件?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蛔溃。 經(jīng)常有香客問(wèn)我绰沥,道長(zhǎng),這世上最難降的妖魔是什么贺待? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任徽曲,我火速辦了婚禮,結(jié)果婚禮上狠持,老公的妹妹穿的比我還像新娘。我一直安慰自己瞻润,他們只是感情好喘垂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绍撞,像睡著了一般正勒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傻铣,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天章贞,我揣著相機(jī)與錄音,去河邊找鬼非洲。 笑死鸭限,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的两踏。 我是一名探鬼主播败京,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梦染!你這毒婦竟也來(lái)了赡麦?” 一聲冷哼從身側(cè)響起朴皆,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泛粹,沒想到半個(gè)月后遂铡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晶姊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年扒接,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帽借。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡珠增,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出砍艾,到底是詐尸還是另有隱情蒂教,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布脆荷,位于F島的核電站凝垛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蜓谋。R本人自食惡果不足惜梦皮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桃焕。 院中可真熱鬧剑肯,春花似錦、人聲如沸观堂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)师痕。三九已至溃睹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胰坟,已是汗流浹背因篇。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笔横,地道東北人竞滓。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吹缔,于是被迫代替她去往敵國(guó)和親虽界。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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

  • 注意: 1涛菠、所謂指令莉御,其實(shí)就是元素的屬性 2撇吞、所有的指令,前提是在js中聲明了是Vue對(duì)象 3礁叔、參數(shù) 1牍颈、靜態(tài)參數(shù)...
    張浩琦閱讀 333評(píng)論 0 0
  • 開篇 1.什么是Vue?Vue.js是一套構(gòu)建用戶界面的框架涣易,它不僅易于上手画机,還可以與其它第三方庫(kù)整合(Swipe...
    Gmn_微雙閱讀 312評(píng)論 0 0
  • 最近做的項(xiàng)目步氏,一直用的Angular6.0框架,期間陸陸續(xù)續(xù)完成了三四個(gè)項(xiàng)目徒爹。業(yè)務(wù)知識(shí)有一定的提升荚醒,但是一直用一個(gè)...
    月上秦少閱讀 1,275評(píng)論 0 4
  • 1.文本渲染 v-text:更新元素的innerTextv-html:更新元素的innerHTMLv-once:靜...
    John_Phil閱讀 537評(píng)論 0 0
  • v-text 預(yù)期:string 詳細(xì): 更新元素的textContent。如果要更新部分的textContent...
    JK丶帝閱讀 174評(píng)論 0 0