vue.js實現(xiàn)todomvc---實踐學(xué)vue(中)

本期教程目標(biāo)

  • 點擊x刪除任務(wù)

  • 雙擊任務(wù)對任務(wù)進行編輯

  • 編輯任務(wù)后按enter鍵或者讓輸入框失去焦點時會保存編輯的任務(wù)座每。而按esc鍵時,會撤銷編輯蚓胸。


    Snipaste_2018-01-22_00-03-51.png

    ??相信通過上一期的學(xué)習(xí),我們對todomvc有一個大概的了解,當(dāng)然了大伙都知道打打豆豆并不是一個好行為,這一章節(jié),我們有三個目標(biāo),都是圍繞著修改打打豆豆展開的,最終目標(biāo)就是讓豆豆不被挨打,瞧多么重要的事情,讓我們來完成吧弃鸦。

    目標(biāo)1:點擊x刪除某一項任務(wù)
    

??要想完成這一目標(biāo),我們還是需要從數(shù)據(jù)驅(qū)動來思考。其實上一章節(jié)中,我們已經(jīng)知道,每一個任務(wù),其實都是list數(shù)組v-for出來的,所以我們只需要將數(shù)組中的數(shù)據(jù)刪除,這樣被刪除的數(shù)據(jù)就不能再渲染到視圖上,從而實現(xiàn)刪除任務(wù)的效果斩跌。既然有了思路,剩下的就簡單很多了桩警。

Snipaste_2018-01-22_00-19-35.png

??通過調(diào)試工具我們可以輕松的找到x對應(yīng)的html結(jié)構(gòu)(這里說個題外的,自己手?jǐn)]頁面的時候發(fā)現(xiàn),跟火狐相比V8引擎是真的快,奈何需要翻墻才能裝插件,確實也是真的煩),找到按鈕后我們可以通過v-on為按鈕添加一個刪除事件處理函數(shù)。
Snipaste_2018-01-22_00-31-59.png

這個處理函數(shù)的偽代碼應(yīng)該是這樣的找到當(dāng)前item在數(shù)組中的位置,然后刪除它所以真是代碼為
Snipaste_2018-01-22_00-32-08.png

很好這樣我們就能完成刪除打打豆豆的任務(wù)了,非常好!但是堵不如疏,我們更希望的并不是不打豆豆而是將打豆豆的行為變?yōu)閻圩o豆豆的行為,這時候我們就需要進行任務(wù)的修改了膘滨。

  目標(biāo)2:修改任務(wù)內(nèi)容

??我們需要的效果是,雙擊任務(wù),彈出一個輸入框,進行輸入甘凭。為了達到這樣的效果,我們需要先將對應(yīng)的class類名找到,大概效果就是隱藏當(dāng)前標(biāo)簽,出現(xiàn)一個輸入框,猜測下,應(yīng)該可以通過定位完成,所以我們現(xiàn)在任務(wù)標(biāo)簽附近尋找,有無輸入框,很但是這里0-06.png](http://upload-images.jianshu.io/upload_images/9947395-75111b289dfd52ff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
當(dāng)然了這一步如果沒有文檔我們只能推測出,修改肯定是在li內(nèi)的input上,但是很難推測到底是添加或刪除那個類名才能實現(xiàn)編輯的效果,索性文檔中已經(jīng)提到了List items should get the class editing when editing and completed when marked as completed
這句話告訴我們,在需要編輯時添加editing類名在li上,而任務(wù)完成時,需要添加completed類。這里我們只用得上前半句

Snipaste_2018-01-22_09-30-00.png

Snipaste_2018-01-22_09-31-57.png

??嗯?看起來很美,但是真的沒毛病嗎?當(dāng)然是有問題了,這又是一個坑,當(dāng)時我在寫這段代碼的時候就自然而然的掉進坑里了,當(dāng)時花了2個小時才想通為什么錯了的原理,希望大伙看了這篇章節(jié),能夠輕松跳過這個坑火邓。
??首先我們的思路是將"bianji"這個變量私有到對應(yīng)的對象中,從而實現(xiàn)雙擊對應(yīng)的任務(wù)改變對應(yīng)的視圖丹弱。但是真的當(dāng)我們雙擊時,視圖并不會改變,item.bianji的值卻實實在在的變?yōu)榱藅rue。出現(xiàn)這個問題,我的第一反應(yīng)就是數(shù)據(jù)沒有響應(yīng)的綁定到視圖上,但是相信大伙在剛剛接觸vue的時候,總會被響應(yīng)的數(shù)據(jù)綁定這句話所震撼,自然而然的想到,在vue中無論什么地方的數(shù)據(jù)都會響應(yīng)的綁定到視圖中,但是文檔中有明確的說明铲咨。讓我們來看看文檔的這一句話

Snipaste_2018-01-22_09-39-22.png

Snipaste_2018-01-22_09-40-00.png

相信大伙看到這里就明白很多了,我們使用上面那種辦法,確實是改變了想要改變的數(shù)據(jù),但是,item.bianji并沒有出現(xiàn)在vue的data函數(shù)中,這樣無論item.bianji怎樣改變,只有當(dāng)因為別的原因視圖更新時,item.bianji的值才會更新到視圖上,所以并不能實現(xiàn)雙擊編輯任務(wù)的效果躲胳。很好,既然知道是哪里錯了,問題就會變得很簡單,我們只要想辦法將item.編輯加入data中即可,這次我把目標(biāo)放在了data中的list上,list更新時也會響應(yīng)到視圖中,我們只要能找到雙擊時對應(yīng)的item,然后在改變那個item里面的bianji屬性即可。具體的代碼實現(xiàn)為:
Snipaste_2018-01-22_09-50-32.png

html的結(jié)構(gòu)不用修改,只用在添加任務(wù)的時候,加入bianji屬性,這樣bianji屬性就相當(dāng)于是添加到了data中,此時再改變item.bianji就會產(chǎn)生響應(yīng)的視圖效果鸣驱。這樣我們就達到了,雙擊鼠標(biāo),編輯任務(wù)的效果泛鸟。這里防止新手大伙跳入另一個坑就再多提一句
Snipaste_2018-01-22_09-53-55.png

文檔中的這句話告訴我們,在vue實例創(chuàng)造后,動態(tài)添加的新屬性并不能響應(yīng)的綁定到視圖中。
  目標(biāo)3:編輯任務(wù)后按enter鍵或者讓輸入框失去焦點時會保存編輯的任務(wù)踊东。而按esc鍵時,會撤銷編輯北滥。

首先,編輯任務(wù)后按enter鍵或者讓輸入框失去焦點時會保存編輯的任務(wù),這兩點都很簡單,無非就是給input編輯框綁定兩個事件即可。這里沒有什么大伙需要注意的坑,代碼實現(xiàn)如下:
Snipaste_2018-01-22_10-05-24.png
Snipaste_2018-01-22_10-05-38.png

以上唯一需要注意的點就是:
Snipaste_2018-01-22_10-08-04.png

??之所以能夠這么處理,還是因為item.title是data中的東西,雙向綁定后,試圖影響內(nèi)存中的數(shù)據(jù),所以修改完成后,取消編輯類名editing就可以看到編輯完成的狀態(tài),因為data中的數(shù)據(jù)都是響應(yīng)的綁定在視圖中闸翅。
??很好,現(xiàn)在就剩最后一個點了,編輯時按esc鍵時,會撤銷編輯再芋。
??想要實現(xiàn)這樣的效果的思路是,雙擊時將被編輯的任務(wù)數(shù)據(jù)保存起來,如果監(jiān)聽到esc按下,則將保存的值重新賦值給原來的item.title。所以代碼實現(xiàn)為:


Snipaste_2018-01-22_10-28-47.png
Snipaste_2018-01-22_10-30-00.png

以上就完成了本章節(jié)的所有內(nèi)容坚冀。

  • 下節(jié)預(yù)告:


    Snipaste_2018-01-22_10-31-24.png
  • 實現(xiàn)上圖中顯示未完成任務(wù)個數(shù)的動態(tài)響應(yīng)
  • vue的路由切換
  • 以及點擊clear completed按鈕,清除所有完成任務(wù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末济赎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌司训,老刑警劉巖构捡,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異壳猜,居然都是意外死亡勾徽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門统扳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喘帚,“玉大人,你說我怎么就攤上這事咒钟〈涤桑” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵朱嘴,是天一觀的道長倾鲫。 經(jīng)常有香客問我,道長萍嬉,這世上最難降的妖魔是什么级乍? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮帚湘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甚淡。我一直安慰自己大诸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布贯卦。 她就那樣靜靜地躺著资柔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撵割。 梳的紋絲不亂的頭發(fā)上贿堰,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音啡彬,去河邊找鬼羹与。 笑死,一個胖子當(dāng)著我的面吹牛庶灿,可吹牛的內(nèi)容都是我干的纵搁。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼往踢,長吁一口氣:“原來是場噩夢啊……” “哼腾誉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤利职,失蹤者是張志新(化名)和其女友劉穎趣效,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猪贪,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡跷敬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哮伟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片干花。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖楞黄,靈堂內(nèi)的尸體忽然破棺而出池凄,到底是詐尸還是另有隱情,我是刑警寧澤鬼廓,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布肿仑,位于F島的核電站,受9級特大地震影響碎税,放射性物質(zhì)發(fā)生泄漏尤慰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一雷蹂、第九天 我趴在偏房一處隱蔽的房頂上張望伟端。 院中可真熱鬧,春花似錦匪煌、人聲如沸责蝠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霜医。三九已至,卻和暖如春驳规,著一層夾襖步出監(jiān)牢的瞬間肴敛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工吗购, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留医男,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓巩搏,卻偏偏與公主長得像昨登,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贯底,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

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

  • 翻譯自“Collection View Programming Guide for iOS” 0 關(guān)于iOS集合視...
    lakerszhy閱讀 3,878評論 1 22
  • 這是vue官網(wǎng)的一個例子丰辣,挺適合作為vue應(yīng)用的入門的撒强。通過這個應(yīng)用,我們能學(xué)到vue的【雙向綁定】,【v-for...
    進擊的前端閱讀 10,055評論 3 33
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫笙什、插件飘哨、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,124評論 4 61
  • 看見這個標(biāo)題,你們第一反應(yīng)會想到什么琐凭? 按照慣性一般會說芽隆,你肯定是感冒了,鼻涕像關(guān)不掉的水龍頭一樣一直流统屈。 其實沒...
    于炫閱讀 409評論 0 1
  • 精英群周大事件:成立開源社區(qū) Higer發(fā)布: 區(qū)塊鏈研習(xí)社的開源社區(qū)成立啦胚吁!這個社區(qū)將延續(xù)比特幣開源,共享愁憔,平等...
    loloooo閱讀 1,344評論 0 7