Vue概念及常見(jiàn)命令介紹(1)
Vue.js介紹
Vue.js是JavaScript MVVM(Model-View-ViewModel)庫(kù),十分簡(jiǎn)潔,Vue核心只關(guān)注視圖層,相對(duì)AngularJS提供更加簡(jiǎn)潔、易于理解的API。Vue盡可能通過(guò)簡(jiǎn)單的API實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。
Vue和MVVM模式
MVVM模式即Model-View-ViewModel。
Vue是以數(shù)據(jù)為驅(qū)動(dòng)的,Vue自身將DOM和數(shù)據(jù)進(jìn)行綁定,一旦創(chuàng)建綁定,DOM和數(shù)據(jù)將保持同步,每當(dāng)數(shù)據(jù)發(fā)生變化,DOM會(huì)跟著變化。
ViewModel是Vue的核心,它是Vue的一個(gè)實(shí)例。Vue實(shí)例時(shí)作用域某個(gè)HTML元素上的,這個(gè)HTML元素可以是body,也可以是某個(gè)id所指代的元素。
DOM Listeners和Data Bindings是實(shí)現(xiàn)雙向綁定的關(guān)鍵。DOM Listeners監(jiān)聽(tīng)頁(yè)面所有View層DOM元素的變化,當(dāng)發(fā)生變化,Model層的數(shù)據(jù)隨之變化;Data Bindings監(jiān)聽(tīng)Model層的數(shù)據(jù),當(dāng)數(shù)據(jù)發(fā)生變化,View層的DOM元素隨之變化。
Vue.js特點(diǎn)
簡(jiǎn)潔:頁(yè)面由HTML模板+Json數(shù)據(jù)+Vue實(shí)例組成
數(shù)據(jù)驅(qū)動(dòng):自動(dòng)計(jì)算屬性和追蹤依賴的模板表達(dá)式
組件化:用可復(fù)用、解耦的組件來(lái)構(gòu)造頁(yè)面
輕量:代碼量小,不依賴其他庫(kù)
快速:精確有效批量DOM更新
模板友好:可通過(guò)npm,bower等多種方式安裝,很容易融入
Vue.js入門小例子
聲明式渲染
本例子由HTML模板(View)+Json數(shù)據(jù)(Model)+Vue實(shí)例(ViewModel)組成。
創(chuàng)建Vue的實(shí)例,需傳入一個(gè)選項(xiàng)對(duì)象,如:數(shù)據(jù)、掛載元素、方法、模生命周期鉤子等。本例子中,選項(xiàng)對(duì)象的el屬性為#app,表示Vue實(shí)例掛載在<div id="app">...</div>元素上,data屬性為exampleData,表示Model為exampleData。View中{{message}}是Vue的一種數(shù)據(jù)綁定語(yǔ)法,在運(yùn)行時(shí),{{message}}會(huì)被數(shù)據(jù)對(duì)象的message屬性替換。
<!DOCTYPE html> <html> <head> <title>聲明式渲染</title> <meta charset="utf-8"> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <!-- View --> <div id="app"> {{message}} </div> <script> //Model var exampleData = { message: 'Hello Vue!' } //ViewModel var app = new Vue({ el: '#app', data: exampleData }) </script> </body> </html>
雙向綁定
在Vue中使用v-model在表單元素上實(shí)現(xiàn)雙向綁定。當(dāng)在輸入框輸入的信息發(fā)生變化,<p>...</p>中的信息隨之變化;當(dāng)通過(guò)控制臺(tái)中的Console,修改exampleData.message的值,輸入框中的信息也隨之變化。
<!DOCTYPE html> <html lang="en"> <head> <title>雙向綁定</title> <meta charset="utf-8"> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <!-- View --> <div id="app"> <p>{{message}}</p> <input type="text" v-model="message"> </div> <script> //Model var exampleData = { message: 'Hello Vue!' } //ViewModel var app = new Vue({ el: '#app', data: exampleData }) </script> </body> </html>
運(yùn)行截圖:
Vue.js常用指令
Vue指令以v-開(kāi)頭,作用在HTML元素上,將指令綁定在元素上時(shí),會(huì)給綁定的元素添加一些特殊行為,可將指令視作特殊的HTML屬性(attribute)。
下面將介紹Vue中常用的幾個(gè)內(nèi)置指令。當(dāng)然,Vue除了內(nèi)置指令,也可以根據(jù)需求自定義指令。
v-if指令
條件判斷指令,根據(jù)表達(dá)式值的真假來(lái)插入或刪除元素,表達(dá)式返回一個(gè)布爾值,語(yǔ)法如下:
v-if = "expression"
例子:
在本例中,表達(dá)式是yes,no,和age>25,yes的值為true,因此在HTML中顯示該元素,其他同理。
<!DOCTYPE html> <html lang="en"> <head> <title>v-if指令</title> <meta charset="utf-8"> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <div id="app"> <h1 v-if="yes">Yes</h1> <h1 v-if="no">No</h1> <h1 v-if="age > 25">Age: {{age}}</h1> </div> <script> var app = new Vue({ el: '#app', data: { yes: true,//值為真,插入元素 no: false,//值為假,不插入元素 age: 28 } }) </script> </body> </html>
運(yùn)行截圖:
v-show指令
條件渲染指令,與v-if不同的是,無(wú)論v-show的值為true或false,元素都會(huì)存在于HTML代碼中;而只有當(dāng)v-if的值為true,元素才會(huì)存在于HTML代碼中。v-show指令只是設(shè)置了元素CSS的style值。語(yǔ)法如下:
v-show = "expression"
例子:
<!DOCTYPE html> <html lang="en"> <head> <title>v-show指令</title> <meta charset="utf-8"> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <div id="app"> <h1 v-show="yes">Yes</h1> <h1 v-show="no">No</h1> <h1 v-show="age > 25">Age: {{age}}</h1> </div> <script> var app = new Vue({ el: '#app', data: { yes: true,//值為真 no: false,//值為假 age: 28 } }) </script> </body> </html>
運(yùn)行截圖:
v-else指令
可配合v-if或v-show使用,v-else指令必須緊鄰v-if或v-show,否則該命令無(wú)法正常工作。v-else綁定的元素能否渲染在HTML中,取決于前面使用的是v-if還是v-show。若前面使用的是v-if,且v-if值為true,則v-else元素不會(huì)渲染;若前面使用的是v-show,且v-show值為true,則v-else元素仍會(huì)渲染到HTML。
v-for指令
循環(huán)指令,基于一個(gè)數(shù)組渲染一個(gè)列表,與JavaScript遍歷類似,語(yǔ)法如下:
v-for = "item in items"
例子:
在本例中,數(shù)組是todos,依次遍歷數(shù)組todos中的每個(gè)元素,將text部分顯示。
<!DOCTYPE html> <html lang="en"> <head> <title>v-for指令</title> <meta charset="utf-8"> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <div id="app"> <ol> <li v-for="todo in todos">{{todo.text}}</li> </ol> </div> <script> var app = new Vue({ el: '#app', data: { todos: [ {text: 'learn Javascript'}, {text: 'learn Vue'}, {text: 'learn ...'} ] } }) </script> </body> </html>
運(yùn)行截圖:
在瀏覽器控制臺(tái)里Console,輸入app.todos.push({text: 'new item'}),則會(huì)插入新的一條信息。
運(yùn)行截圖:
v-bind指令
給DOM綁定元素屬性,語(yǔ)法如下:
v-bind:argument="expression"
其中,argument通常是HTML元素的特性,如:v-bind:class="expression"。
注:v-bind指令可以縮寫為:冒號(hào)。如::class="expression"。
例子:
在本例子中,當(dāng)鼠標(biāo)懸停在span標(biāo)簽的文字上時(shí),會(huì)顯示加載網(wǎng)頁(yè)的時(shí)間。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <div id="app"> <span v-bind:title="message">Hover your mouse over me</span> </div> <script> var app = new Vue({ el: '#app', data: { message: 'you loaded this page on ' + new Date() } }) </script> </body> </html>
v-on指令
用于監(jiān)聽(tīng)DOM事件,語(yǔ)法與v-bind類似,如監(jiān)聽(tīng)點(diǎn)擊事件v-on:click="doSth"。
注:v-on指令可以縮寫為@符號(hào)。如:@click="doSth"。
例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <div id="app"> <p><input type="text" v-model="message"></p> <p> <button v-on:click="greet">Greet</button> </p> <p> <button v-on:click="say('hello vue')">Hello</button> </p> </div> <script> var app = new Vue({ el: '#app', data: { message: 'Greet to Vue' }, methods: { greet: function(){ alert(this.message); }, say: function(msg){ alert(msg); } } }) </script> </body> </html>
運(yùn)行結(jié)果:
一個(gè)綜合性例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <div id="app"> <fieldset> <legend>Create New</legend> <label for="">Name:</label> <input type="text" v-model="newPerson.name"> <label for="">Age:</label> <input type="text" v-model="newPerson.age"> <label for="">Age:</label> <select name="" id="" v-model="newPerson.sex"> <option value="Male">Male</option> <option value="Female">Female</option> </select> <button @click="createPerson">Create</button> </fieldset> <table> <tr> <th>Name</th> <th>Age</th> <th>Sex</th> <th>Delete</th> </tr> <tr v-for="person in people"> <td>{{person.name}}</td> <td>{{person.age}}</td> <td>{{person.sex}}</td> <td><button @click="deletePerson($index)">Delete</button></td> </tr> </table> </div> <script> var app = new Vue({ el: '#app', data: { newPerson: { name: '', age: 0, sex: 'Male' }, people: [{ name: 'tyy', age: 24, sex: 'Male' }, { name: 'syd', age: 24, sex: 'Female' }] }, methods: { createPerson: function(){ this.people.push(this.newPerson); this.newPerson = { name: '', age: 0, sex: 'Male' } }, deletePerson: function(index){ this.people.splice(index, 1); } } }) </script> </body> </html>
運(yùn)行截圖:
參考鏈接:
本文已被整理到了《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在vue中解決提示警告 for循環(huán)報(bào)錯(cuò)的方法
今天小編就為大家分享一篇在vue中解決提示警告 for循環(huán)報(bào)錯(cuò)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09VUE解決微信簽名及SPA微信invalid signature問(wèn)題(完美處理)
這篇文章主要介紹了VUE解決微信簽名及SPA微信invalid signature問(wèn)題(完美處理),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03基于vue實(shí)現(xiàn)多功能樹(shù)形結(jié)構(gòu)組件的示例代碼
一個(gè)優(yōu)雅展示樹(shù)形結(jié)構(gòu)數(shù)據(jù)的 Vue 組件,遞歸渲染每個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn),支持自定義顏色、文本和布局,通過(guò)獨(dú)特的樣式巧妙處理不同層級(jí),為用戶打造豐富的視覺(jué)盛宴,文中通過(guò)代碼給大家介紹的非常詳細(xì),感興趣的同學(xué)可以自己動(dòng)手嘗試一下2024-02-02淺談Vue中的this.$store.state.xx.xx
這篇文章主要介紹了Vue中的this.$store.state.xx.xx用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Vue監(jiān)控路由與路由參數(shù), 刷新當(dāng)前頁(yè)面數(shù)據(jù)的方法匯總
這篇文章主要介紹了Vue監(jiān)控路由與路由參數(shù), 刷新當(dāng)前頁(yè)面數(shù)據(jù)的幾種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10