vue.js學(xué)習(xí)(2)

  1. 計(jì)算屬性
    在我看來(lái),計(jì)算屬性是vue的一大特色曼追,它極大的簡(jiǎn)化了開(kāi)發(fā)邏輯窍仰,極大地提升了開(kāi)發(fā)效率±袷猓或許不用計(jì)算屬性驹吮,也完全可用寫vue,不影響開(kāi)發(fā)頁(yè)面晶伦,但我們更該去嘗試一些更先進(jìn)更便捷的東西不是嗎?基礎(chǔ)案例:
<div id="example"> <p>Original message: "{{ message }}"</p> <p>Computed reversed message: "{{ reversedMessage }}"</p></div>
var vm = new Vue({ el: '#example', data: { message: 'Hello' }, computed: { // a computed getter reversedMessage: function () { // `this` points to the vm instance return this.message.split('').reverse().join('') } }})

reversedMessage的值始終跟隨message的值得變化而發(fā)生變化碟狞,不需要再做其他的處理就能達(dá)到這個(gè)效果,非常便捷婚陪。
計(jì)算屬性 VS methods
用methods明顯也能達(dá)到同樣的效果族沃,不過(guò),大家明顯能感覺(jué)到近忙,這么一個(gè)數(shù)據(jù)處理竭业,用methods似乎智润。及舍。對(duì),大材小用的一種感覺(jué)窟绷,簡(jiǎn)簡(jiǎn)單單的用一個(gè)計(jì)算屬性computed锯玛,輕松搞定!另外,還有計(jì)算緩存的問(wèn)題,這里不細(xì)說(shuō)攘残,只需知道這個(gè)概念拙友,在實(shí)際用的時(shí)候自然能夠在兩者之間取舍。

計(jì)算屬性 VS Watched Property

直接放官方代碼對(duì)比看效果用watch的代碼:

var vm = new Vue({ el: '#demo', data: { firstName: 'Foo', lastName: 'Bar', fullName: 'Foo Bar' }, watch: { firstName: function (val) { this.fullName = val + ' ' + this.lastName }, lastName: function (val) { this.fullName = this.firstName + ' ' + val } }})

用computed的代碼:

var vm = new Vue({ el: '#demo', data: { firstName: 'Foo', lastName: 'Bar' }, computed: { fullName: function () { return this.firstName + ' ' + this.lastName } }})

有感受到computed討人喜愛(ài)的地方了嗎歼郭,反正我是感受到了遗契。
setter
感覺(jué)setter是個(gè)略為高級(jí)點(diǎn)的用法,目前我也還沒(méi)想到它的實(shí)際應(yīng)用場(chǎng)景病曾,因此只放代碼實(shí)例:

computed: { fullName: { // getter get: function () { return this.firstName + ' ' + this.lastName }, // setter set: function (newValue) { var names = newValue.split(' ') this.firstName = names[0] this.lastName = names[names.length - 1] } }}

watch
百度搜索大家都用過(guò)牍蜂,每輸一個(gè)字就會(huì)彈出相應(yīng)的建議選項(xiàng),這就是和watch大概相似的原理泰涂,時(shí)刻監(jiān)聽(tīng)頁(yè)面上的數(shù)據(jù)變化鲫竞,只要它一變化,就出發(fā)一個(gè)函數(shù)事件逼蒙,這類的事件一般是異步請(qǐng)求的居多从绘,用來(lái)提升用戶體驗(yàn),也算是現(xiàn)在很常用的技術(shù)了是牢,用法并不復(fù)雜僵井,小伙伴們一試便知。

  1. 列表渲染
    有的小伙伴可能發(fā)現(xiàn)驳棱,我的筆記并沒(méi)有按照官方文檔的順序一路寫下來(lái)驹沿。那是因?yàn)椋@是我的筆記蹈胡,而不是教程渊季,所以記下來(lái)的更多的是自己覺(jué)得比較需要注意或者是自己有些想法的地方。照搬官方文檔的話罚渐,我的這些筆記意義也就并不大了却汉。
    遍歷對(duì)象 v-for

vue的v-for不光能夠遍歷數(shù)組,也能夠直接遍歷對(duì)象荷并,基本語(yǔ)法是:

<div v-for="(value, key, index) in object"> {{ index }}. {{ key }} : {{ value }}</div>

范圍遍歷 v-for
v-for 也可以直接遍歷一個(gè)整數(shù)合砂,特別方便,如下:

<div> <span v-for="n in 10">{{ n }}</span></div>

得出結(jié)果是:

1 2 3 4 5 6 7 8 9 10

數(shù)組更新檢測(cè)
vue 包含了一組觀察數(shù)組的變異方法源织,它的可以觸發(fā)視圖更新:
· push()
· pop()
· shift()
· unshift()
· splice()
· sort()
· reverse()

注意下面兩張情況不會(huì)觸發(fā)視圖的更新:
當(dāng)直接設(shè)置數(shù)組里的一項(xiàng)值時(shí)翩伪,如

vm.items[indexOfItem] = newValue

當(dāng)修改數(shù)組長(zhǎng)度時(shí),如

vm.items.length = newLength

我就曾經(jīng)在項(xiàng)目中遇到這種情況谈息,官方也提供了解決辦法缘屹,第1種情況:

// Vue.setVue.set(example1.items, indexOfItem, newValue)

或者

// Array.prototype.splice`example1.items.splice(indexOfItem, 1, newValue)

第2種情況:

example1.items.splice(newLength)

其實(shí)解決方法遠(yuǎn)遠(yuǎn)不局限于這兩種,真正遇到只要能避開(kāi)直接出現(xiàn)上述的兩種情況就可以解決侠仇。
事件處理器
事件修飾符
在事件處理程序中調(diào)用 event.preventDefault() 或 event.stopPropagation() 是非常常見(jiàn)的需求轻姿。雖然我們當(dāng)然可以自己在methods中手寫這些犁珠,但vue給我們提供更好更方便的方法,那就是事件修飾符互亮,具體做法是在指令的后綴后面加上 . 和阻止事件犁享,有以下阻止事件:
.stop
.prevent
.capture
.self
.once下面是一些事例:

<!-- 阻止單擊事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重載頁(yè)面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修飾符可以串聯(lián) -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修飾符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件偵聽(tīng)器時(shí)使用事件捕獲模式 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只當(dāng)事件在該元素本身(而不是子元素)觸發(fā)時(shí)觸發(fā)回調(diào) -->
<div v-on:click.self="doThat">...</div>

按鍵修飾符
按鍵事件的綁定也跟上述的事件相似,直接上例子:

<!-- 只有在 keyCode 是 13 時(shí)調(diào)用 vm.submit() --><input v-on:keyup.13="submit">

vue為一些常用的按鍵提供了別名豹休,這樣就不用每次都要去找keyCode了炊昆,樣子如下:

<!-- 同上 --><input v-on:keyup.enter="submit"><!-- 縮寫語(yǔ)法 --><input @keyup.enter="submit">

全部的按鍵別名:
.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right還可以自定義按鍵別名哦,是不是很貼心威根,自定義別名方法如下:

// 可以使用 v-on:keyup.f1Vue.config.keyCodes.f1 = 112

為什么在HTML中監(jiān)聽(tīng)事件
這個(gè)可能并不能使我們更加熟練的使用vue窑眯,但能讓我們?nèi)チ私鈜ue的內(nèi)層設(shè)計(jì)思想,從中得到一些啟發(fā)医窿“跛Γ可以看到,vue的思想就是讓我們只需要去單純的處理數(shù)據(jù)運(yùn)算就可以了姥卢,至于DOM上的所有事情卷要,我們都無(wú)須擔(dān)心,它都提供了最便捷的方法和最完善的善后工作独榴,這種視圖層和數(shù)據(jù)層完全的分離僧叉,無(wú)論是對(duì)于當(dāng)時(shí)的開(kāi)發(fā)者,還是后面的維護(hù)者來(lái)說(shuō)棺榔,都是極好的(在這里瓶堕,我們先暫且不討論討論性能,畢竟可能對(duì)于前端初學(xué)者症歇,更關(guān)注的還是便捷性和易用性)郎笆。再貼上官方的一段話。使用 v-on 有幾個(gè)好處:
·掃一眼 HTML 模板便能輕松定位在 JavaScript 代碼里對(duì)應(yīng)的方法忘晤。
·因?yàn)槟銦o(wú)須在 JavaScript 里手動(dòng)綁定事件宛蚓,你的 ViewModel 代碼可以是非常純粹的邏
輯,和 DOM 完全解耦设塔,更易于測(cè)試凄吏。
·當(dāng)一個(gè) ViewModel 被銷毀時(shí),所有的事件處理器都會(huì)自動(dòng)被刪除闰蛔。你無(wú)須擔(dān)心如何自己
清理它們痕钢。總結(jié)得太好了!
3.表單控件綁定
多個(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: []
}
})

頁(yè)面的效果如下:

Paste_Image.png

你會(huì)發(fā)現(xiàn)序六,根本不需要再做任何其他的操作任连,只要在頁(yè)面上綁定好,vue自動(dòng)幫我們把所有的復(fù)選框的value值push進(jìn)了v-model指定的數(shù)組难咕,厲害吧!

總結(jié)
小伙伴們课梳,相信經(jīng)過(guò)今天的這篇文章距辆,你已經(jīng)對(duì)什么是只關(guān)注視圖層的處理這個(gè)概念有更深的理解了吧余佃,同時(shí)暮刃,應(yīng)該也被vue提供的便捷操作所折服。在我看來(lái)爆土,了解一個(gè)框架的核心思想和它的特色是遠(yuǎn)遠(yuǎn)比學(xué)會(huì)使用它要重要的多椭懊。一件工具,把它簡(jiǎn)簡(jiǎn)單單的當(dāng)成工具步势,那么你也許可以把它用的很好氧猬,但你卻永遠(yuǎn)受制于人。如果把它看成一種設(shè)計(jì)坏瘩,一種思想的聚合體盅抚,并嘗試去學(xué)習(xí),去模仿倔矾,那么你將會(huì)跳出你的邊界妄均,看到一片全新的天地。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哪自,一起剝皮案震驚了整個(gè)濱河市丰包,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壤巷,老刑警劉巖邑彪,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胧华,居然都是意外死亡寄症,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門矩动,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瘸爽,“玉大人,你說(shuō)我怎么就攤上這事铅忿〖艟觯” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵檀训,是天一觀的道長(zhǎng)柑潦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)峻凫,這世上最難降的妖魔是什么渗鬼? 我笑而不...
    開(kāi)封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮荧琼,結(jié)果婚禮上譬胎,老公的妹妹穿的比我還像新娘差牛。我一直安慰自己,他們只是感情好堰乔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布偏化。 她就那樣靜靜地躺著,像睡著了一般镐侯。 火紅的嫁衣襯著肌膚如雪侦讨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天苟翻,我揣著相機(jī)與錄音韵卤,去河邊找鬼。 笑死崇猫,一個(gè)胖子當(dāng)著我的面吹牛沈条,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诅炉,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜡歹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了汞扎?” 一聲冷哼從身側(cè)響起季稳,我...
    開(kāi)封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澈魄,沒(méi)想到半個(gè)月后景鼠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痹扇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年铛漓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲫构。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浓恶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出结笨,到底是詐尸還是另有隱情包晰,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布炕吸,位于F島的核電站伐憾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赫模。R本人自食惡果不足惜树肃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瀑罗。 院中可真熱鬧胸嘴,春花似錦雏掠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至驾讲,卻和暖如春蚊伞,著一層夾襖步出監(jiān)牢的瞬間席赂,已是汗流浹背吮铭。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颅停,地道東北人谓晌。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像癞揉,于是被迫代替她去往敵國(guó)和親纸肉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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