摘要:在模板中放入太多的邏輯會(huì)讓模板過(guò)重且難以維護(hù)。它會(huì)根據(jù)控件類型自動(dòng)選取正確的方法來(lái)更新元素。指令需要使用的語(yǔ)法,指的是原數(shù)據(jù)數(shù)組,指的是迭代的數(shù)組元素。
注:本教程所使用的vue版本為 2.5.16
MVC與MVVM
MVC(Model-View-Controller):
M指的是從后臺(tái)獲取到的數(shù)據(jù), V指的是顯示動(dòng)態(tài)數(shù)據(jù)的html頁(yè)面, C是指響應(yīng)用戶操作、經(jīng)過(guò)業(yè)務(wù)邏輯處理后去更新視圖的過(guò)程,在此過(guò)程中會(huì)導(dǎo)致對(duì)view層的引用。
這里我們發(fā)現(xiàn)我們網(wǎng)站的大量代碼都被放在Controller,導(dǎo)致Controller代碼臃腫;而且不利于單元測(cè)試,因?yàn)闃I(yè)務(wù)邏輯處理和視圖更新操作會(huì)混雜在一起。
MVVM (Model-View-ViewModel):
MVVM是MVC的一個(gè)衍生模型,這里的 ViewModel 把業(yè)務(wù)邏輯處理、用戶輸入驗(yàn)證等跟視圖更新操作分離開(kāi)了。MVVM是數(shù)據(jù)驅(qū)動(dòng)的,我們只需要關(guān)心數(shù)據(jù)的處理邏輯即可,它會(huì)通過(guò)模板渲染去多帶帶處理視圖的更新而不需要我們親自去操作Dom元素。
實(shí)例化Vue對(duì)象
Vue會(huì)將渲染模板結(jié)合數(shù)據(jù)對(duì)象生成的html結(jié)構(gòu)替換掉根節(jié)點(diǎn),只要數(shù)據(jù)對(duì)象上的message發(fā)生改變,插值處的內(nèi)容就會(huì)跟著改變,上述例子的實(shí)際效果如下:
message: hello world
模板語(yǔ)法
上面的雙大括號(hào)綁定是vue最常用的數(shù)據(jù)綁定方式,除了雙大括號(hào)還可以使用v-text屬性進(jìn)行綁定
message:
如果要綁定html結(jié)構(gòu)的話,需要使用到v-html指令,否則vue會(huì)把這段html代碼看成字符串直接綁定到對(duì)應(yīng)位置
new Vue({ el: "#app", data:{ message: "hello world", html: "hello world" }, template: "message:" })
需要綁定html元素特性的時(shí)候需要使用v-bind指令,v-bind可以省略
雙大括號(hào)的插值方法還可以使用js表達(dá)式,這些表達(dá)式會(huì)在所屬 Vue 實(shí)例的數(shù)據(jù)作用域下被解析
{{ number + 1 }} {{ boolean ? "true" : "false" }} {{ message.split("").reverse().join("") }}
注意,這里的javascript語(yǔ)句只能是單個(gè)表達(dá)式,其他的聲明變量、流程控制語(yǔ)法都不會(huì)生效
事件綁定
除了數(shù)據(jù)綁定外,vue還幫我們優(yōu)化了事件綁定流程,指令為v-on,可縮寫(xiě)為@,后面是事件名稱
打印1 打印1
僅僅一句js表達(dá)式是不夠支撐我們的日常開(kāi)發(fā)的,所以vue給我們提供了自定義事件處理方法
new Vue({ el: "#app", data: { message: "hello world" }, //log為methods中定義的函數(shù)名,vue會(huì)默認(rèn)把原生DOM事件對(duì)象當(dāng)做參數(shù)傳到處理函數(shù)中 template: "Click Me", methods: { log: function(event){ console.log(this.message); event.stopPropagation(); } } });
除了直接綁定到一個(gè)方法,也可以在內(nèi)聯(lián) JavaScript 語(yǔ)句中調(diào)用方法
Click Me
計(jì)算屬性 computed
模板內(nèi)的表達(dá)式非常便利,但是設(shè)計(jì)它們的初衷是用于簡(jiǎn)單運(yùn)算的。在模板中放入太多的邏輯會(huì)讓模板過(guò)重且難以維護(hù)。例如這個(gè)字符串反轉(zhuǎn):
{{ message.split("").reverse().join("") }}
這種情況我們可以用 computed 解決
new Vue({ el: "#app", data: { message: "hello" }, template: "{{ reversedMessage }}", //olleh computed: { reversedMessage: function(){ return this.message.split("").reverse().join(""); } } });
這里看渲染模板就直觀多了
監(jiān)聽(tīng)屬性 watch
Vue 提供了 watch 這種通用的方式來(lái)觀察和響應(yīng) Vue 實(shí)例上的數(shù)據(jù)變動(dòng)
問(wèn)題:
{{ answer }}
表單綁定,指令為 v-model
v-model 指令在表單 及
Message: {{ message }}
單個(gè)復(fù)選框
data: { checked: true }
多個(gè)復(fù)選框的情況下,把v-model綁定到同一個(gè)數(shù)組即可:
data: { checkedColor: [] }
單選按鈕
data: { checkedRadio: "" }
條件渲染
在javascript語(yǔ)法中有if-else等流程語(yǔ)句讓程序執(zhí)行不同的代碼塊,在vue中同樣有 v-if、v-else-if、v-else 這些指令控制某些節(jié)點(diǎn)的顯示與否
在上述例子中,我們點(diǎn)擊 button 會(huì)顯示不同的dom,但是如果我們?cè)趇nput里面輸入文字再進(jìn)行切換的時(shí)候會(huì)發(fā)現(xiàn),輸入的文字并不會(huì)被清除,這是因?yàn)関ue的 就地復(fù)用 策略導(dǎo)致的。vue為了盡可能高效地渲染dom元素,通常會(huì)復(fù)用已有元素而不是從頭開(kāi)始渲染,如果不想vue復(fù)用這些元素,我們可以添加一個(gè)具有唯一值的 key 屬性
另一個(gè)用于根據(jù)條件展示元素的選項(xiàng)是 v-show 指令。用法大致一樣:
Hello!
v-if 與 v-show 區(qū)別:
v-if 是惰性渲染,在初始渲染時(shí)條件為假,什么也不做——直到條件第一次變?yōu)檎鏁r(shí),才會(huì)開(kāi)始渲染條件塊;在切換過(guò)程中條件塊內(nèi)的事件監(jiān)聽(tīng)器和子組件會(huì)被銷毀和重建。
v-show 不管初始條件是什么,元素總會(huì)被渲染,切換的只是css的display屬性
列表渲染
我們用 v-for 指令根據(jù)一組數(shù)據(jù)表進(jìn)行列表渲染。v-for 指令需要使用 item in list 的語(yǔ)法,list指的是原數(shù)據(jù)數(shù)組,item指的是迭代的數(shù)組元素。v-for 指令還支持一個(gè)可選的表示當(dāng)前迭代元素索引的第二個(gè)參數(shù) (item, index) in list
- {{ item.text }}
除了數(shù)組,v-for指令還可以通過(guò)一個(gè)對(duì)象的屬性來(lái)迭代,v-for 指令最多可以支持3個(gè)參數(shù),第二第三個(gè)可選。
Vue的生命周期
根據(jù)上圖做了一個(gè)測(cè)試?yán)?,列出了每個(gè)生命周期對(duì)應(yīng)的不同屬性的狀態(tài)
{{message}}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/108012.html
摘要:與綁定數(shù)據(jù)綁定一個(gè)常見(jiàn)需求是操作元素的列表和它的內(nèi)聯(lián)樣式。兩者只能選其一對(duì)象語(yǔ)法我們可以傳給一個(gè)對(duì)象,以動(dòng)態(tài)地切換。注意不支持語(yǔ)法。相比之下,簡(jiǎn)單得多元素始終被編譯并保留,只是簡(jiǎn)單地基于切換。這意味著將分別重復(fù)運(yùn)行于每個(gè)循環(huán)中。 vue Class 與 Style 綁定 數(shù)據(jù)綁定一個(gè)常見(jiàn)需求是操作元素的 class 列表和它的內(nèi)聯(lián)樣式。因?yàn)樗鼈兌际菍傩?,我們可以?v-bind 處理...
摘要:菜鳥(niǎo)教程這是一個(gè)屬性其值是字符串菜鳥(niǎo)教程同上這是一個(gè)屬性其值是字符串用于定義的函數(shù),可以通過(guò)來(lái)返回函數(shù)值。它們都有前綴,以便與用戶定義的屬性區(qū)分開(kāi)來(lái)。 開(kāi)篇語(yǔ) 我最近學(xué)習(xí)了js,取得進(jìn)步,現(xiàn)在學(xué)習(xí)vue.js.建議新手學(xué)習(xí),請(qǐng)不要用npm的方式(vue-cli,vue腳手架),太復(fù)雜了. 請(qǐng)直接下載vue.js文件本地引入,就上手學(xué)習(xí)吧參照菜鳥(niǎo)教程網(wǎng)站的vue.js教程http://...
摘要:這個(gè)問(wèn)題應(yīng)該是百度或者知乎都能知道答案的,以上是自己親身學(xué)習(xí)的一些途徑方便少走一點(diǎn)彎路入門(mén)。 問(wèn)題1:前端的學(xué)習(xí)路線 基礎(chǔ)的html,css,js,推薦慕課網(wǎng)免費(fèi)課程:前端工程師路徑,極客學(xué)院免費(fèi)課程:前端工程師路徑 大概刷過(guò)就可以了,不用死記硬背某個(gè)知識(shí)點(diǎn),css跟js還需要加深學(xué)習(xí)的,在實(shí)戰(zhàn)過(guò)程中不懂就去查文檔 基礎(chǔ)的ps切圖能力 慕課網(wǎng)ps基礎(chǔ)課程 擁有自己的虛擬主機(jī) 傳送...
摘要:這個(gè)問(wèn)題應(yīng)該是百度或者知乎都能知道答案的,以上是自己親身學(xué)習(xí)的一些途徑方便少走一點(diǎn)彎路入門(mén)。 問(wèn)題1:前端的學(xué)習(xí)路線 基礎(chǔ)的html,css,js,推薦慕課網(wǎng)免費(fèi)課程:前端工程師路徑,極客學(xué)院免費(fèi)課程:前端工程師路徑 大概刷過(guò)就可以了,不用死記硬背某個(gè)知識(shí)點(diǎn),css跟js還需要加深學(xué)習(xí)的,在實(shí)戰(zhàn)過(guò)程中不懂就去查文檔 基礎(chǔ)的ps切圖能力 慕課網(wǎng)ps基礎(chǔ)課程 擁有自己的虛擬主機(jī) 傳送...
閱讀 2381·2021-11-25 09:43
閱讀 2989·2019-08-30 15:52
閱讀 1957·2019-08-30 15:44
閱讀 1039·2019-08-30 10:58
閱讀 831·2019-08-29 18:43
閱讀 3274·2019-08-29 18:36
閱讀 2385·2019-08-29 17:02
閱讀 1514·2019-08-29 17:01