摘要:改變其中的任何一層,另外一層都會(huì)改變。插值相信你也注意到了,通過(guò)的形式就能取到的值,并與進(jìn)行綁定。中改變中的值時(shí)相應(yīng)也改變了中的,從而也得到改變。上面的代碼改為這樣則不會(huì)隨著數(shù)據(jù)的改變而更新。顧名思義,用于條件判斷,和是一對(duì)。
什么是Vue.js
vue是法語(yǔ)中視圖的意思,Vue.js是一個(gè)輕巧、高性能、可組件化的MVVM庫(kù),同時(shí)擁有非常容易上手的API。作者是尤雨溪,寫(xiě)下這篇文章時(shí)vue.js版本為1.0.7
準(zhǔn)備我推薦使用sublime text作為編輯器,關(guān)于這個(gè)編輯器可以看我這篇文章。在package control中安裝
Vuejs Snippets
Vue Syntax Highlight
推薦使用npm管理,新建兩個(gè)文件app.html,app.js,為了美觀(guān)使用bootstrap,我們的頁(yè)面模板看起來(lái)是這樣:
安裝Document Vue demo
.......
使用npm安裝:
npm install vue
當(dāng)然你也可以在github上clone最新的版本并作為單文件引入,或者使用CDN:
http://cdn.jsdelivr.net/vue/1.0.7/vue.min.js http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.7/vue.min.jsHelloWorld
動(dòng)手寫(xiě)第一個(gè)Vue.js 應(yīng)用吧。
app.html:
{{message}}
app.js:
new Vue({ el:"#app", data: { message:"hello vue.js." } });創(chuàng)建Vue實(shí)例
在使用Vue.js之前,我們需要先像這樣實(shí)例化一個(gè)Vue對(duì)象:
new Vue({ el:"#app" });雙向數(shù)據(jù)綁定
就像HelloWorld展示的那樣,app.html是view層,app.js是model層,通過(guò)vue.js(使用v-model這個(gè)指令)完成中間的底層邏輯,實(shí)現(xiàn)綁定的效果。改變其中的任何一層,另外一層都會(huì)改變。
插值相信你也注意到了,通過(guò){{value}}的形式就能取到value的值,并與value進(jìn)行綁定。HelloWorld中改變input中的值時(shí)相應(yīng)也改變了app.js中的message,從而{{message}}也得到改變。上面的代碼改為這樣:
{{*message}}
則message不會(huì)隨著數(shù)據(jù)的改變而更新。同時(shí)還支持一些簡(jiǎn)單的表達(dá)式:
{{message + "vue is awesome"}} {{ message.split("").reverse().join("") }}常用的指令 v-model
v-model可用于一些表單元素,常見(jiàn)的input,checkbox,radio,select:
v-for
Selected: {{ selected | json }}
列表渲染在實(shí)際開(kāi)發(fā)中非常常見(jiàn),vue.js使用v-for這個(gè)指令就能完成,v-for取代了1.0以前版本中的v-repeat。在app.js中準(zhǔn)備一些數(shù)據(jù):
new Vue({ el: "#app", data: { book: { id: 0, author: "", name: "", price: "" }, books: [{ id: 1, author: "曹雪芹", name: "紅樓夢(mèng)", price: 32.0 }, { id: 2, author: "施耐庵", name: "水滸傳", price: 30.0 }, { id: "3", author: "羅貫中", name: "三國(guó)演義", price: 24.0 }, { id: 4, author: "吳承恩", name: "西游記", price: 20.0 }] } })
在data里我們?cè)O(shè)置了兩個(gè)數(shù)據(jù)book和book[] books,在app.html中我們只要這樣就能獲取到數(shù)據(jù)了:
{{book.id}} {{book.name}} {{book.author}} {{book.price}}
如果你比較細(xì)心的話(huà),在數(shù)據(jù)還未加載完時(shí)是會(huì)有閃爍的情況出現(xiàn),解決方法也很簡(jiǎn)單,使用v-cloak,然后定義css:
[v-cloak] { display: none }v-on
vue.js通過(guò)v-on完成事件處理與綁定,比如為一個(gè)button綁定click事件,我們就可以這么寫(xiě):
也可以縮寫(xiě):
我們需要為v-on傳入事件參數(shù),然后在vue的實(shí)例中聲明doSomething這個(gè)方法就可以調(diào)用了:
new Vue({ el: "#app", methods: { doSomething: function () { /...../ } } })
接著上面書(shū)的例子,我們用v-model綁定form:
在app.js中增加我們的addBook方法:
methods: { addBook: function() { //計(jì)算書(shū)的id this.book.id = this.books.length + 1; this.books.push(this.book); //將input中的數(shù)據(jù)重置 this.book = ""; } }
我們?cè)俳∪幌鹿δ埽黾右粋€(gè)刪除按鈕:
delBook方法:
delBook:function(book){ this.books.$remove(book); }
vue.js為數(shù)組擴(kuò)展了$remove方法,查找并刪除我們作為參數(shù)傳遞過(guò)去的book。
v-if/v-else/v-show顧名思義,v-if用于條件判斷,和v-else是一對(duì)。用法也很簡(jiǎn)單,下面的代碼是將id為偶數(shù)的操作按鈕換個(gè)樣式:
...... ..... .........
這里用到了標(biāo)簽,用于包含多個(gè)元素,當(dāng)元素只有一個(gè)時(shí),直接在元素上用v-if即可:
Yes
No
v-show作用與v-if類(lèi)似,不同的是v-show的元素會(huì)始終渲染并保持在 DOM 中,且v-show不支持標(biāo)簽。
過(guò)濾器與Linux中的管道類(lèi)似,vue.js也使用的是|:
{{message | uppercase}}
這樣就能輸出message的大寫(xiě)了,過(guò)濾器也能串聯(lián)在一起使用:
{{message | reverse | uppercase}}
這里reverse并不是內(nèi)建的過(guò)濾器,我們可以用Vue.filter自定義:
Vue.filter("reverse", function (value) { return value.split("").reverse().join("") })
過(guò)濾器支持接收參數(shù),比較常用的是orderBy [param]和filterBy [param],現(xiàn)在我們?yōu)楸砀裨黾幼远x排序的功能,為表頭綁定click事件:
序號(hào) 書(shū)名 作者 價(jià)格
想sortBy傳遞列的參數(shù),定義sortBy和data:
data: { sortparam: "" }, methods:{ sortBy: function(sortparam) { this.sortparam = sortparam; } }
添加過(guò)濾器:
計(jì)算屬性 計(jì)算屬性可以幫助我們完成一些復(fù)雜的邏輯計(jì)算,比如我們需要添加一個(gè)書(shū)的總價(jià),在vue實(shí)例中添加computed:
new Vue({ /.../ computed: { sum: function() { var result = 0; for (var i = 0; i < this.books.length; i++) { result = Number(this.books[i].price) + result; }; return result; } }, /.../ })在app.html中使用插值表達(dá)式:
{{sum}}vue-resourcevue-resource作為vue插件的形式存在,通過(guò) XMLHttpRequest 或 JSONP 發(fā)起請(qǐng)求并處理響應(yīng)。在開(kāi)發(fā)中也非常常見(jiàn),現(xiàn)在我們用vue-resource來(lái)請(qǐng)求books:
引入和vue類(lèi)似:
npm install vue-resource --save 如果你的項(xiàng)目遵循CommonJS: var Vue = require("vue"); Vue.use(require("vue-resource"));也可以直接引入單文件或者CDN。
get在vue中新增ready對(duì)象,當(dāng)頁(yè)面加載完成時(shí)就去請(qǐng)求:
new Vue({ el: "#app", ready: function() { this.$http.get("book.json", function(data) { this.$set("books", data); }).error(function(data, status, request) { console.log("fail" + status + "," + request); }) }, data: { .... books:"" }, .....為了演示,這里將json格式的數(shù)據(jù)保存在book.json中,這段數(shù)據(jù)你可以直接使用JSON.stringify()得到:
[{"id":1,"author":"曹雪芹","name":"紅樓夢(mèng)","price":32},{"id":2,"author":"施耐庵","name":"水滸傳","price":30},{"id":"3","author":"羅貫中","name":"三國(guó)演義","price":24},{"id":4,"author":"吳承恩","name":"西游記","price":20}]接下來(lái)你需要將app.html中運(yùn)行在一個(gè)服務(wù)器中,否則由于瀏覽器安全的限制,是無(wú)法直接讀取的,如果你嫌麻煩可以用這個(gè)參數(shù)啟動(dòng)chrome。
.chrome.exe --allow-file-access-from-files如果你使用了npm,想要啟動(dòng)一個(gè)服務(wù)器就太簡(jiǎn)單了:
npm install http-server -g //在當(dāng)前目錄 http-server //然后訪(fǎng)問(wèn)localhost:8080/app.htmlpostpost的語(yǔ)法也很簡(jiǎn)單:
this.$http.post(url,postdata,function callback)在使用的時(shí)候遇到一個(gè)小坑,這個(gè)$http請(qǐng)求和jquery的ajax還是有點(diǎn)區(qū)別,這里的post的data默認(rèn)不是以form data的形式,而是request payload。解決起來(lái)也很簡(jiǎn)單:
在vue實(shí)例中添加headers字段:http: { headers: {"Content-Type": "application/x-www-form-urlencoded"} }后來(lái)翻了下vue-resource的源碼,發(fā)現(xiàn)有更加簡(jiǎn)單的做法:
Vue.http.options.emulateJSON = true;這里只簡(jiǎn)單介紹下,詳細(xì)的文檔請(qǐng)大家移步這里吧。
vue.js目前還有眾多的插件,詳情看這里。
總結(jié)這里簡(jiǎn)單介紹了下vue.js的基本用法,但只僅僅介紹了一小部分作為庫(kù)使用的內(nèi)容,想了解更多vue.js的內(nèi)容,還是多多關(guān)注vue.js的github主頁(yè),所用的例子我也分享了,可以在這里查看并運(yùn)行結(jié)果。
更多http://vuejs.org/
https://github.com/vuejs/
http://vegibit.com/vue-js-tutorial/
http://www.zhihu.com/people/evanyou
http://www.html-js.com/article/column/99
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86154.html
相關(guān)文章
vue.js快速入門(mén)
摘要:但是,今天我要寫(xiě)一個(gè)快速入門(mén),本人覺(jué)得還是有一點(diǎn)用處,因?yàn)?,我不可能在一天之?nèi)精通某種東西,卻可以在一兩小時(shí)入門(mén)。不知道還要不要再來(lái)一個(gè)快速入門(mén),發(fā)展得挺快,東西也像類(lèi)似的全家。 以前看到多少天學(xué)習(xí)系列,我都深感煩躁,短短幾天怎么可以精通,那是對(duì)于他們而言。但是,今天我要寫(xiě)一個(gè)快速入門(mén),本人覺(jué)得還是有一點(diǎn)用處,因?yàn)?,我不可能在一天之?nèi)精通某種東西,卻可以在一兩小時(shí)入門(mén)。 回到vue本身...
前端必須要珍藏的技術(shù)文章和面試題
摘要:前端工程師學(xué)習(xí)資料,快速查找面試題,經(jīng)典技術(shù)文章的總結(jié),編程技巧,幫助學(xué)習(xí)者快速定位問(wèn)題花點(diǎn)時(shí)間整理出一下前端工程師日常工作所需要的學(xué)習(xí)資料查找,幫助學(xué)習(xí)者快速掌握前端工程師開(kāi)發(fā)的基本知識(shí)編程始于足下記住再牛逼的夢(mèng)想也抵不住傻逼似的堅(jiān)持蝴蝶 前端工程師學(xué)習(xí)資料,快速查找面試題,經(jīng)典技術(shù)文章的總結(jié),編程技巧,幫助學(xué)習(xí)者快速定位問(wèn)題花點(diǎn)時(shí)間整理出一下web前端工程師日常工作所需要的學(xué)習(xí)資料...
Vue.js快速入門(mén)
摘要:今年以來(lái),的文檔更新很快完善社區(qū)也日漸狀大,再加上于某廠(chǎng)你懂的大力的推廣,的前景十分光明。一般情況下,中小型的系統(tǒng)從遷移到版本大概只需要天的時(shí)間??烊?dòng)手嘗試吧原創(chuàng)新書(shū)移動(dòng)前端高效開(kāi)發(fā)實(shí)戰(zhàn)已在亞馬遜京東當(dāng)當(dāng)開(kāi)售。 作者:曉飛(滬江Web前端開(kāi)發(fā)工程師)本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明作者及出處 Vue.js框架已經(jīng)火了好長(zhǎng)一段時(shí)間了,早在2015年的雙11中,淘寶的部分導(dǎo)購(gòu)業(yè)務(wù)——如:雙十一晚會(huì)搖...
vue.js快速入門(mén)
摘要:的核心庫(kù)只關(guān)注視圖層,并且非常容易學(xué)習(xí),同時(shí)擁有非常容易上手的中英文都有提供快速入門(mén)準(zhǔn)備地址地址沒(méi)錯(cuò)就只需要這兩個(gè)就可以開(kāi)發(fā)了是核心文件,在這里只是為了提高開(kāi)發(fā)效率而引用的,是可選的。專(zhuān)門(mén)存儲(chǔ)一些數(shù)據(jù)的屬性,數(shù)據(jù)一定是對(duì)象格式。 **關(guān)于前陣子的文章錯(cuò)誤有點(diǎn)多所以從新修改了并添加了一些在官方腳手架vue-cli開(kāi)發(fā)時(shí)需要注意的事項(xiàng),Vue.js是一個(gè)輕巧、高性能、可組件化的MVVM庫(kù)。...
發(fā)表評(píng)論
0條評(píng)論
caspar
男|高級(jí)講師
TA的文章
閱讀更多
第五章-Java修飾符#yyds干貨盤(pán)點(diǎn)#
閱讀 3682·2021-11-23 09:51
RAKsmart(RAK Cloud):首購(gòu)云服務(wù)器低至3折,云服務(wù)器產(chǎn)品全場(chǎng)8折優(yōu)惠,香港云$9.
閱讀 1680·2021-10-22 09:53
cubecloud,國(guó)慶限時(shí)促銷(xiāo),全場(chǎng)VPS 88,可選中國(guó)香港CN2 GIA/美國(guó)CN2 GIA/
閱讀 1359·2021-10-09 09:56
深入css之去除inline-block元素之間的多余間隙
閱讀 865·2019-08-30 13:47
APICloud Github 5大開(kāi)源項(xiàng)目集合展示
閱讀 2164·2019-08-30 12:55
CSS技巧記錄
閱讀 1607·2019-08-30 12:46
display: flex;’布局下使用‘white-space: nowrap;’導(dǎo)致的問(wèn)題
閱讀 1120·2019-08-30 10:51
初探響應(yīng)式布局 - 以小項(xiàng)目為例
閱讀 2419·2019-08-29 12:43
閱讀需要支付1元查看