一、環(huán)境搭建
最快速最便捷的方式是通過vue腳手架vue-cli來搭建

也可以通過指定版本號(hào)來下載 cnpm i -g @vue/cli@3.1.1
如果vue的版本不一致,可以通過uninstall來卸載重新安裝 npm uninstall -g @vue/cli
二、創(chuàng)建并運(yùn)行項(xiàng)目



三、模板語法
模板語法出自“胡子語法”,在props屬性或者data方法里面定義變量,然后在模板中用{{變量名}}來使用這個(gè)變量,或者用v-html指令來使用包含html標(biāo)簽的變量,像class、id等特性得用v-bind:id(:id)/v-bind:class(:class)來使用變量,同時(shí)在模板中還可以使用表達(dá)式。
3.1 文本


3.2 html標(biāo)簽


3.3 class、id等渲染

3.4 語句


3.5 指令
指令指的是帶有v- 前綴的特殊attribute,vue中常見指令有v-if/v-else、v-show、v-hide、v-once、v-bind、v-on、v-for。
還有一個(gè)特殊的用法是自定義指令,建一個(gè)js文件,引入vue,使用vue.directive方法來創(chuàng)建一個(gè)自定義指令,directive方法傳入兩個(gè)參數(shù),第一個(gè)參數(shù)為自定義指令名,第二個(gè)參數(shù)為對(duì)象,對(duì)象里可以使用鉤子函數(shù)(binding、inserted、update、componentUpdated、unbind),這些鉤子函數(shù)有四個(gè)參數(shù)(el、binding、vnode、oldVnode)。使用的時(shí)候引入這個(gè)js文件,然后在模板中通過v-指令名來調(diào)用。如下所示:



3.6 修飾符
3.7 縮寫
v-bind:href? 可以寫成 :href? ?|? ?v-on:click 可以寫成 @click
四、樣式與遍歷
4.1 計(jì)算屬性? 使用于具有依賴關(guān)系的數(shù)據(jù)監(jiān)聽
一般當(dāng)有數(shù)據(jù)變化會(huì)帶來其他數(shù)據(jù)變化的時(shí)候,是用回調(diào)函數(shù)來操作的,當(dāng)某某變完改變另一個(gè),在vue中則是由計(jì)算屬性來完成,相當(dāng)于vue自己的回調(diào)。

4.2 類與樣式
4.2.1 數(shù)組方式:適合較少的class


4.2.2 對(duì)象方式:適用于比較多的class名或者動(dòng)態(tài)class
可以直接賦值給class一個(gè)對(duì)象,屬性值是字符串也就是class名,屬性值是定義的變量為布爾值;也可以賦值給class一個(gè)變量,這個(gè)變量是在props傳過來的或者data方法中定義的一個(gè)對(duì)象變量,同樣的這個(gè)對(duì)象的屬性名是class名,屬性值為布爾值。如下所示
4.2.2.1 直接在class里面寫對(duì)象


4.2.2.2 對(duì)象變量的方式


4.3 條件&列表渲染
條件:v-if/v-else/v-else-if? ?用于根據(jù)條件來判斷是否渲染一塊內(nèi)容
數(shù)組列表渲染: v-for指令


也可以引用數(shù)組的下標(biāo)


對(duì)象列表渲染: v-for也可以用來渲染對(duì)象,如果直接傳一個(gè)參數(shù),那就是對(duì)象屬性值,如果用(value,key)這樣的方式來循環(huán)渲染,第一個(gè)參數(shù)value是對(duì)象屬性值,第二個(gè)key是對(duì)象屬性名
對(duì)象渲染一個(gè)參數(shù)




分組用法 復(fù)雜模板的分組條件處理的方式


五、事件處理
5.1 定義與縮寫
vue中通過v-on:來監(jiān)聽dom事件,比如v-on:click

v-on可以用簡(jiǎn)寫@來代替

5.2 內(nèi)聯(lián)寫法
除了上面的直接給v-on事件綁定一個(gè)方法外,還有一種內(nèi)聯(lián)的寫法來通過:方法名(參數(shù)1、參數(shù)2),這種方式來調(diào)用,參數(shù)1就是 傳遞的參數(shù),參數(shù)2是觸發(fā)事件的dom元素。如下所示:




5.3 事件修飾符
vue中提供了修飾符來實(shí)現(xiàn)之前的event.preventDefault()這種功能。常見的修飾符有.stop(阻止單擊事件繼續(xù)傳播) 、.prevent(阻止默認(rèn)行為)、.once(只執(zhí)行一次)、.self(只有觸發(fā)元素是自身時(shí)才調(diào)用函數(shù))、.passive(不阻止默認(rèn)行為,所以不可以與.prevent同時(shí)使用)、.capture(先在此處理,再交由內(nèi)部元素處理-----有點(diǎn)懵啥意思啊)。
如下:因?yàn)閎utton是div的子元素,點(diǎn)擊button觸發(fā)fn1,事件冒泡也會(huì)觸發(fā)父元素div的點(diǎn)擊事件調(diào)用say這個(gè)函數(shù),但是因?yàn)橛昧?stop這個(gè)修飾符,阻止了單擊事件繼續(xù)傳播,所以這里點(diǎn)擊button的時(shí)候查看控制臺(tái)只會(huì)看到輸出222,不會(huì)調(diào)用say這個(gè)函數(shù)。


六、組件
6.1 props:組件的參數(shù)傳遞? 父組件傳給子組件
在父組件中定義一個(gè)變量posts,這個(gè)變量是一個(gè)數(shù)組,父組件中引用了子組件child,這里還用v-for指令進(jìn)行了循環(huán),將循環(huán)的每一個(gè)元素設(shè)置為post屬性,傳給了子組件child



6.2 自定義事件 :子組件向父組件通信
上面的是父組件向子組件通信,子組件向父組件通信可以通過自定義事件的方式來進(jìn)行


6.3 slot:插槽在組件抽象設(shè)計(jì)中的應(yīng)用
如果希望父組件調(diào)用子組件中有一部分父組件調(diào)用的不同則顯示內(nèi)容不同,這里可以使用slot插槽來實(shí)現(xiàn)



如果想要使用多個(gè)插槽,可以在子組件中放置插槽的時(shí)候給插槽添加name屬性,父組件中調(diào)用子組件的時(shí)候放置插槽替換內(nèi)容的時(shí)候,在替換內(nèi)容里通過slot=“插槽的name值”就可以了。



七、路由
通過vue create 項(xiàng)目名來創(chuàng)建的項(xiàng)目并沒有自動(dòng)配置使用vue-router,所以當(dāng)項(xiàng)目需要使用的時(shí)候,需要如下步驟:
1、下載vue-router

2、新建pages文件夾,并編寫測(cè)試頁面組件a.vue和b.vue

3、創(chuàng)建router.js文件,創(chuàng)建vue-router實(shí)例,并且在vue中使用vue-router

4、在main.js中將這個(gè)vue-router實(shí)例掛載到vue實(shí)例上去

5、這時(shí)候會(huì)發(fā)現(xiàn)控制臺(tái)會(huì)報(bào)runtime的錯(cuò)誤,這是因?yàn)轫?xiàng)目默認(rèn)是只能實(shí)時(shí)運(yùn)行而不同模板渲染的,想要通過路由必須要在vue的配置文件中將runtimeCompiler選項(xiàng)設(shè)置為true,但是項(xiàng)目中并沒有這個(gè)配置文件,所以得手動(dòng)創(chuàng)建一下vue.config.js文件,并且配置一下。如下:

6、修改public文件夾下面的index.html,引入router-view組件和router-link組件,router-view是用來占位顯示router-link中的to屬性指向的頁面,每當(dāng)點(diǎn)擊router-link組件,router-link的to屬性中指向的頁面就會(huì)顯示在router-view的位置,注意這個(gè)to屬性配置的路徑得和上面3的vue-router實(shí)例中配置的routes數(shù)組值得對(duì)象的path屬性相同。



八、vuex基礎(chǔ)
8.1 基礎(chǔ)使用
1、下載vuex

2、新建vuex的文件,在vue中使用vuex,并創(chuàng)建vuex的Store實(shí)例,配置state、mutations、actions等然后導(dǎo)出

3、在main.js中將vuex的Store實(shí)例掛載到全局vue實(shí)例上去,這樣全局都可以使用了

4、組件中使用

8.2 vuex模塊化
vuex中可以使用modules來對(duì)vuex的狀態(tài)進(jìn)行模塊化管理
1、在store文件夾下面創(chuàng)建modules文件夾,并編寫money模塊和count模塊,并將其導(dǎo)出

2、在store的index.js的vuex的store實(shí)例中的modules屬性中導(dǎo)入各個(gè)模塊

3、組件中使用state中的變量需要用模塊的state變量名的方式,觸發(fā)方法需要在前面指定是屬于哪個(gè)vuex模塊的

4、傳參在組件中傳參,在mutations和actions中聲明一下參數(shù)

