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