壹、目錄及代辦事項
Table of Contents
貳、基礎內容文件要點說明
一、Vue 開發環境介紹
Vue 是由資料來驅動畫面的,因此資料是不斷在變動的。
這邊就要用 Vue Dev tools 來檢視資料。
二、建立應用程式
- 使用el綁定ID
- 直接使用 el:"#app" 掛載
- 在需要時再使用 $mount("#app") 掛載的功能
- Vue的應用程式不能巢狀排列
- 呈現程式碼在頁面的方法 < pre >< /pre >
三、雙向綁定的資料
- v-model : 透過花括號{{}}方式綁定文字,基本上 v-model 只會用在 input, textarea, select 這些傳入資訊的元素
- v-text : 透過指令的方式增加文字
- v-html : 透過指令的方式增加文字及Html標籤
四、MVVM 的概念
VueJS是以資料狀態操作畫面

五、v-bind 動態屬性指令
1.透過 v-bind 添加 html 屬性,類似 setAttribute。但是這樣說可能會有點差距,因為 vue 裡面是使用property 來綁定 HTML 屬性,而不是 attribute。
2.v-bind 內可以放入表達式
表達式:()有值的
六、v-for 、 v-if
1. v-for:
動態產生多筆資料於畫面上
當括號中有不同筆數的資料,變數也代表不同意思
- itemValue : 回傳的是陣列中的屬性值。冒號:後
- item : 回傳的是陣列中的屬性名稱。冒號:前
- index : 回傳的是陣列中的索引值
2. v-if:
過濾資料條件
避免將 v-for 、 v-if 放在同一層內。
七、使用 v-on 來操作頁面行為
1.按下按鈕後,觸發文字反轉的行為並顯示文字
- 使用this來選取這個app裡面的屬性
- v-on:click搭配methods內的函式來觸發動作
- 可以觸發多個函式 v-on:click="firstFunction(); secondFunction();
- v-on要使用的資料一定要在data中預先定義好
2. 可以把函式內容寫在 v-on 裡面
3. v-on 帶入參數
每按一次按鈕,item.cash 的錢就會加五百
八、透過修飾符,讓 v-on 操作更簡單
1. v-on:click後面的修飾符
- .stop 停止 event.stopPropagation()。停止冒泡事件,由內而外 button -> box -> div
- .prevent 停止預設動作
- .capture 添加事件偵聽器時使用 capture 模式。 由外而內 div -> box -> button
- .self 只觸發本身事件
- .once 只觸發一次事件
- .passive
2. 鍵盤修飾符
- .enter
- .tab
- .delete (捕获“删除”和“退格”键)
- .esc
- .space
- .up
- .down
- .left
- .right
3.滑鼠修飾符
2.縮寫
九、 v-class 動態切換 className
動態增加class
- @class="{ '要加入的className' : 判斷式true/false }
十、computed 運算功能
1. computed 內必須是 function
2. 一定要回傳值 return
3. 如果不是在 this 內,computed無法被觸發
4. computed 不能傳參數 function( para )
5. computed 變更條件是資料更動時
十一、Methods 與 Computed 的使用情境
1. computed 是在監控資料更動後,重新運算結果呈現於畫面上
一般來說不會修改資料,只會回傳用於畫面呈現的資料
2. methods 就是互動的函式,需要觸發才會運作
會用來修改資料內容,會建議把 Method 作為主動處發的方式,就比較不會搞混(如 click)
3. 效能
如果資料量大,computed 自然會比較慢
只要資料變動就會觸發,無形之中執行次數也會增加勒
因此在大量資料時,會建議透過 methods 減少不必要的運算喔
十二、Vue 表單與資料的綁定
1. checkbox、radio、selected 的 v-model 會去綁定 value 內的值
由於開發者設定了 type="checkbox",所以自動的對應到 checked 屬性的監聽,
相對於 type="text" 來說,一個是監聽 value,另一個則是監聽 checked 屬性。
但假如v-mode的資料型態有不一樣,也會去做另外的相對應。
資料型態是陣列的話,checkBox打勾後,他會去抓value的值。
資料型態是布林或字串的話,checkBox打勾後,他會顯示true或false。
3. select 結合 v-for
a. 記的 value 是動態加入的,要綁定 :value
b. 如果要讓選項變成多選,可以在 select 標籤中加入 multiple
4. 複選框
加入 true-value 和 false-value 可以讓 sex 值在因為 true or false 改變
5. 修飾符介紹
a. v-model.lazy 類似 on-click 功能,在離開 focus 或是按下 enter 時,字串才輸出
b. v-model.number 確認輸出的數字型態是數值,而不是字串
c. v-model.trim 去除頭尾的空白
十三、元件基礎概念
1. vue 的 conponent 中,每個元件都可以獨立的儲存自己的狀態
2. 元件必須先定義,後面的程式碼才讀取的到,所以要擺在前面。
3. 試著定義一個元件
Vue.component('元件名稱' , data{function} , 資料呈現的方式)
貳、 製作一個 Todo List 來小試身手吧
參考 Medium 文章
參、進階模板語法介紹
一、模板資料細節說明
1. v-model="text"
- 為雙向綁定的。
- v-model 是綁定在表單元件或自訂元件上。表單元件像是<input>、<select>和<textarea>
2. v-text="text"、{{ text }} 與 v-once
- 為雙向綁定。
- 綁定輸入文字的內容。如div、p、span…
- 如果不想雙向綁定,則在<>內加入 v-once,就只會出現 data 初始的內容
3. v-html
- 使用 v-html 可以插入有作用的 Html 語法。但要注意使用的地方可能造成的XSS攻擊,像是讓客戶輸入的資料就不建議使用。
4. 表達式 {{ }}
- 串接兩段文字 {{ text+rawHtml }}
- 直接實現js語法 {{ text.split('').reverse().join('') }}
- 運算 {{ number1+number2 }}
- :disabled 的資料為 true 時,會使這個 input disable。
二、 動態切換 ClassName 及 Style 多種方法
1. 物件寫法
將物件寫在 :class 裡面
2. 物件寫法2
將物件寫在data裡面
3. 陣列寫法
先在 data 裡面宣告一個空陣列,在 input 勾選時,再將 value 一一加到陣列裡面
4. 綁定行內樣式
:style = {樣式屬性:"樣式的值"}
樣式屬性採駝峰式寫法 backgroundColoe,或是用單引號刮起來 'background-color'
5. Vue 會為不同瀏覽器加上 Prefix
三、v-for 與其使用細節
1. index (索引) 可以不只是數字,當物件有鍵值時就會把數字替換成鍵值
- 將 v-for 後面補上(item, key ,index)三個屬性,就能提取物件的屬性、鍵值和索引。
2. 避免 DOM 元素快速置換的方法
當 Vue.js 用v-for正在更新已渲染過的元素列表時,它默認用“就地複用”策略。如果數據項的順序被改變 (以這單元為例,是指 arrayData 資料順序被翻轉改變)
Vue 將不會移動 DOM 元素來匹配數據項的順序 (以這單元為例,是指 input 元素順序不會跟著 arrayData 資料新的順序改變位置)
而是簡單複用此處每個元素 (繼續使用原本的 input 元素),並且確保它在特定索引下顯示已被渲染過的每個元素 (也就是顯示、渲染原本順序的 input 元素)
為了給 Vue 一個提示,以便它能跟蹤每個節點的身份 (每個元素在 DOM 裡面就是一個節點,所以就是要給 Vue 一個提示,讓 Vue 能追蹤到 input 元素)
從而重用和重新排序現有元素 (重新排序 input 元素的順序,讓它跟著 arrayData 資料新的順序改變位置)
你需要為每項提供一個唯一key屬性 (提供一個唯一key屬性給 input 元素,讓 Vue 能依據唯一的key屬性追蹤 input 元素,進而讓它跟著 arrayData 資料新的順序改變位置 )
理想的key值是每項都有的唯一 id
所以 :key 是避免 就地複用(快速替換),直接做強制替換喔
而就地複用就是不替換實體 DOM 來達到,因為在 JS 中,抽換 DOM 是相當耗費效能的
替 key 綁定上專屬的變數,這樣後面的 input 的資料也會跟著變換
3. 使用 v-for 過濾陣列
- filter ( function(item, index, array ) {… reutrn true;}
a. 指向 data 要使用 this,但是在 v-for 裡面有使用函式 filter 會使 this 指向全域 window,不管是 filter、forEach、find 等處理陣列行為的方法裡面的 this 都是指向 window,因為他們是 callBack function,回呼函式的 this 都會只到 globe,因此要宣告 vm 參考文章
b. filter 的 return 會回傳 ture 的內容。如果 matach 的比對有吻合,在 return 裡面就會回傳
4. v-for 無法運行的狀況
a. 不能直接把陣列長度變成 0 來刪除陣列。
b. 無法直接對這個陣列的索引修改資料
如果要修改要使用 Vue.set(target,key,value)
c. 使用純數字的迴圈
d. Template 在 v-for 中的運用
template 是在 JS 中渲染而已,不會出現在 HTML 裡面,考慮到語意,使用 template 會比較好,
如果將 v-for 放在 tbody 裡面,這樣 tbody 會一直重複出現,對語意不好。
e. 使用 v-for 時,建議都要綁定 :key ,可以使用 id,不重複的值
v-for連結參考
四、 v-if 、v-else 與 v-else-if
1. v-if 、v-else 的運用
前一兄弟元素必需有 v-if 或 v-else-if 才能使用 v-else
2. template 標籤
a.我們需要使用 Vue 指令,但我們希望這個標籤不要被輸出,就可以使用 template。
template 標籤像是在人口販子,在背後操作 HTML 的消失與出現,而他自己則是從來不出現。
b. :key 要綁定在真實的節點上,而 template 是 Vue 的虛擬節點,不能綁定 :key
a. 使用 template 配合 v-if 來控制 tr、td 是否出現
3. v-else-if 的運用
4. v-if 與 v-show 的差異
v-if 會把不符合條件的 DOM 移除
v-show 則是把不符合條件的 DOM 加上 display : none
5. key
a. :key 必須綁定在真實的節點上
b. :key 綁定固定字串時,可以不使用:
c. :key 通常是綁定不同的 id ,或是不重複的變數
五、 Computed 與 Watch
1. computed
a. computed 是不用經過主動的觸發就可以計算的功能,像 @click。 computed 有點像 RPG 裡面的被動技能。但記得 computed 的使用都得使用 return 回傳值。
b. computed 如果處理大量的資料會有效能上的問題
c. Computed 無法帶參數,methods 可以
d. 不確定每次都會更新,請用 Computed。確定每次都會更新,就用 methods。
e. computed 只會在相關的資料變動下才會更新
- 試著變動 input 內的資料,取得現在秒數
- 因為 computed 內的 now Fn 有寫到 var total = this.a+this.b,因此 a 或 b 的資料有變動,資料都會更新
f. 使用 Computed 來過濾資料
g. match 只能用在字串上面,如果要搜尋年紀要改成
2.使用 Computed 來呈現時間格式
a. timeStamp 轉換文章連結
3. Watch
Watch 可讓我們監視某個值,當這個值變動的時候,就去做某些事情。
肆、Vue的生命週期
伍、Vue.js 元件
一、使用 x-template 建立元件
1. 建立全域的元件
a. 使用 Vue.component
b. 宣告一段 type="text/x-template",並設置 id 指向 Vue.component 內的 template。
c. 因為 tbody 內必須放 tr,因此要寫為 tr is ="row-component" ,將 row-component 動態替換掉 tr。
d. Vue.component 和 #app 的資料是分開的,因此要藉由 props: ['person'] 宣告一個物件來傳遞資料。因此,原本的 item 會把資料傳到 person 裡面,person 將資料存入 props,讓元件獲得資料。

2、建立區域的元件
a. 將原本全域的 Vue.component 改為另宣告一個應用,將原本 props 和 template 值放在裡面
b. 在 app 中在宣告 components: 對應到 child。
3.使用 function return 建構資料格式
Vue.component 內必須有 function return
4. props 基本觀念
a. 由外而內動態傳入資料
b. 如果 props 使用的是小駝峰寫法 imgUrl,那在 html 內要改成 img-url
5. props 使用上的注意事項
a. 修正單向數據流所造成的錯誤

在 Vue 上看就會呈現兩筆資料
b. 物件傳參考特性 及 尚未宣告的變數
尚未宣告的變數
- 透過
傳入的資料會因為會有傳入時間差,導致 props 找不到資料而跳錯誤。
- 解決方式可以透過在 HTML 內加入 v-if="一定會出現在 ajax 傳進來的資料",讓元件產生的時間往後移,當資料傳入完成後,在產生元件
物件傳參考特性
- 因為物件傳參考特性,當修改 card 內的物件屬性,在原本 root 層的物件屬性也會改變。
- 比較 a 與 b,為什麼 a 會跳錯,b 不會 ?
第一個單向數據流的 url 因為是「字串」的關係,所以在做更動的時候會跳錯誤;而第二個card的部分因為 data 是一個物件,所以有傳參考的特性
c. 維持狀態與生命週期
- 使用 keep-card 維持狀態
- keepalive 只能使用在元件上,如果使用在 HTML 標籤上 keepalive 會被強制移除
- 每個應用程式和元件都有獨自的生命週期
6. props 型別及預設值
a. props 型別
可以在 props 裡面設定型別,如果型別不對會跳錯
b. props 預設值
如果 template 沒有傳入任何值,可以在 props 裡面寫入預設值。
c.靜態與動態傳入數值差異
- 在"靜態"傳入 cash="300" 的時候,cash 的內容會被判斷為字串
- 在"動態"傳入 :cash="300" 時,cash 的內容則會被判斷為數值,
- 在"動態"傳入 :cash="true" 時,cash 的內容則會被判斷為布林
- 如果要寫入字串得加入'',改成 :cash="'300'",cash 的內容就會被判斷為字串
7. emit 向外層傳遞事件

-
先在父元件中定義一個名為 incrementTotal 的 method,incrementTotal 所執行的動作就是 this.cash 做累加。
-
在 HTML 使用子元件標籤時,自訂一個觸發事件,並將在父元件的 method,也就是先前定義 incrementTotal 傳入作為監聽器,兩者間用 v-on 進行綁定。例如:v-on:increment="incrementTotal"
,其中:increment 是自訂事件名稱,incrementTotal 則是父元件中的方法。
-
為子元件 template 的 button 加上 click 事件 incrementCounter。而在該方法的實作中,我們會再使用 emit 去觸發自訂事件 increment,如:this.$emit("increment")
。若有需要做參數傳遞,則將參數寫在逗號後面,不需要加“”,this.$emit("increment", Number(this.counter))。
8. 元件插槽
a. 單一插槽
如果只有一個標籤需要替換,就可以使用 slot 標籤
b. 具名插槽
當有大量的內容需要被取代,而且分散在元件的各處,就可以使用 "具名插槽" 。
- 在需要替換的標籤加入 slot="名字",如果是不要被顯示的標籤可以使用 template 代替
- 在 x-template 中,則可以使用<slot name="名字"></slot>對應
9.使用 is 動態切換元件
- 使用 <di v :is ="current " :data ="item"> 來動態切換兩個不同的 x-template。
- 當'藍綠色元件'按鈕按下時,current = 'primary-component',
:is = "primary-component"
- 當'紅色元件'按鈕按下時,current = 'primary-component',
:is = "danger-component"
陸、Vue 常用 API
一、使用 Extend 避免重複造輪子
下方的 childOne 和 childTwo 的內容大部分是一樣的,只差在 template: ,這時就可以建立一個 Vue.extend,把重複的內容放在裡面。child1 和 child2 再去取用就好。
1. data 裡面原本就有的值,如果再寫一次就會覆蓋掉
2. data 裡面原本沒有的值,寫上就會新增
二、Filter 自訂畫面資料呈現格式
1. 區域使用方法
- 在要改變的變數上加上 | (filter的變數名稱)
- 在 component 加上 filters: (filter的變數名稱){方法}
2. 全域使用方法
- 在 component 同樣外層的加上 Vue.filter('filter 變數名稱',function(){filter 變數方法})
3. filter 使用範例
三. 無法寫入的資料,用 set 搞定他
1. 有時使用 AJAX 時,無法先定義 data 內的資料內容,可以用 set 來強制寫入
2. Vue.set (target, propertyName/index, value)
- target : 目標
- index: 索引
- value: 值
四、 Mixin 混合其它的元件內容
1. 使用 mixin 做出一個可以讓其他元件複製的內容。
- 宣告 var mixinName = {要給大家複製的內容}
- 在 component 裡面寫上 mixins=[mixinName1,mixinName2 …],可以寫多個。
五、使用 Directive 開發自己的互動 UI
1. 官方文件的例子:
每次重新整理後,都可以讓 input 呈現 focus 的狀態
2. Directive 的生命週期
-
bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
-
inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
-
update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
簡單來說,就是你每次更新狀態會觸發,例如在 input 裡面輸入文字,每輸入一個字元就會觸發一次 update
-
componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
-
unbind:只调用一次,指令与元素解绑时调用。
3. 使用 directive 做表單驗證
- el:指令所绑定的元素,可以用来直接操作 DOM 。
- binding: 包含一些參數可以做物件操作
- name:指令名,不包括 v- 前缀。
- value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。
- oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
- expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"。
- arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"。
- modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。
- vnode:Vue 编译生成的虚拟节点
4. directive 詳細用法
- 找到 V-validation 裡面的值

- 找到 v-model 內的值


六、插入外部套件
Bootstrap+Vue
柒、Vue Cli 的建置與運作原理
接下來的操作都在 cmd 命令操作提示字元上
一、安裝 Vue cli
1. 將 Vue-cli 安裝在全域的環境下
2. 查看 Vue 指令
Options:
-h, –help: output usage information
Commands:
init: generate a new project from a template
list: list available official templates
build: prototype a new project
create: (for v3 warning only)
help [cmd]: display help for [cmd]
3. list 列出官方可以用的樣板
這邊使用 webpack
★ browserify - A full-featured Browserify + vueify setup with hot-reload, linting & unit testing.
★ browserify-simple - A simple Browserify + vueify setup for quick prototyping.
★ pwa - PWA template for vue-cli based on the webpack template
★ simple - The simplest possible Vue setup in a single HTML file
★ webpack - A full-featured Webpack + vue-loader setup with hot reload, linting, testing & css extraction.
★ webpack-simple - A simple Webpack + vue-loader setup for quick prototyping.
4. 開啟一個 webpack 樣板
template-name: 設為 webpack
project-name: 專案名稱
5. 安裝相關套件
到剛創立的資料夾到
6. 執行專案
二、新增自定義環境變數

三、 安裝套件在 Vue Webpack 中
1. 安裝 bootstrap 及 sass
- sass-loader 的版本會過高無法安裝,改由安裝 7.1.0 版
- component 的元件 css 是另外獨立出來的,在預設 helloWorld.vue 裡面
7. vue-cli 資料夾說明
2.使用 vue-axios 套件串接 AJAX
- 在 entry 的資料夾(預設 main.js) import 下面的程式碼
捌、Vue Router
一、使用 Vue Router 及配置路由文件
- 在 src 下建立 router 的資料夾,資料夾內建立 index.js,並輸入下面程式碼
- 在 app.vue 中,加入 router-view
二、新增路由路徑及連結
在 Vue.app 加入 Navbar 新增導覽列的功能
- 切換連結的方法有兩種
- 動態綁定名字: <router-link :to="{name:'綁定的name'}"></router-link>
- 綁定路徑: <router-link to="/綁定的路徑"></router-link>
三、 製作巢狀路由頁面
變更元件中的子元件 children
四、 使用動態路由切換頁面 Ajax 結果
五、 命名路由,同一個路徑載入兩個頁面元件
- 原本 Vue.app 只有一個 router-view,現在要另外加上一個,將新增的加上 name="", 沒有 name 的則為預設。
- 將原本對應一個的 component 改成對應多個的 components
六、 Vue Router 參數設定
七、 自定義切換路由方法
官網連結
- template 標籤改為 a 連結,觸發動作為 click
玖、 Vue 出一個電商網站
一、登入介面
- api 路徑包含 [api伺服器路徑] [api path]
- 伺服器的選取方式可能會改變,因此將 path 寫在 config/dev(開發用) 或 config/prod(實際產品) 裡面。
- 實際擷取
process.env 為環境變量
二、驗證登入及 Vue Router 的配置
1. 在 main.js 下使用 router.beforeEach 來設定導航守衛
三、 套用 Bootstrap Dashboard 版型
1. 建立 Dashboard 版型
- 切割版型 NavBar 和 SideBar 由另外兩個 component 匯入
- Product 的頁面由 admin 的子 routes 進入
四、製作產品列表
讀取後端資料後,將資料放進 template 中
五、 Vue 中運用 Bootstrap 及 jQuery
- 這個部分要使用到 model,有使用到 JQuery,因此要 import 'bootstrap'
- 還有另外安裝 npm install –save jquery popper.js
- 使用 JS 的方法叫出 Model,確保 model 裡面的值已經背後端撈出來
- 在使用 $('#productModal').modal('show') 叫出 Model 時,會出現 $ 未定一的錯誤
六、 產品的新增修改
1. methods 內新增更新資料的函數
2. 舊資料中編輯資料與新建立產品共用函式
- 透過傳進來的(isNew , item)參數,來判斷打開的 model 是新增產品還是編輯產品。
3. 刪除產品
七、串接上傳檔案 API
上傳格式
八、增加使用者體驗 - 讀取中效果製作
- 在開始讀取前將 vm.isLoading = true; 讓動畫效果開始,讀取結束後 vm.isLoading = false; 結束動畫效果
- 使用 font使用 font-awesome,CDN
- 使用 v-if 讓 fileUploading 為 true 時才會呈現動畫效果
九、 產品列表的分頁邏輯
1. 使用後端的傳來的資料製作分頁功能
十、套用價格的 Filter 技巧
1. 在 src 的資料下再建立一個 filter 的資料夾
2. 將千分位的公式放在這的資料夾下

3. 在 main.js entry 下,import fliter 的資料進來

十一、Dashboard 新增模擬購物頁面 - 新增卡片式產品列表
十二、取得單一產品
- 使用 status.loadingItem == item.id 來判斷動畫的顯示
十三、
十四、刪除購物車品項及新增優惠碼
十四、建立訂單及表單驗證技巧
1. 安裝 VeeValidate 套件
參考同學 Blog
- 在 main.js import VeeValidate 並使用
2. 使用 VeeValidate
required 驗證
- 在 input 加入 v-validate="'required'" 代表這是需要驗證的資料
- 可以透過 errors.has('name') 來檢驗使用者是否有正確填入資料,errors.has('name') 預設為 false,如果他打完,又把資料清空, errors.has('name') 就會顯示為 true
- errors.has('name') 的 name 對應的是 input 中 name=" "," " 中的內容
email 驗證
- v-validate="'required|email'" ,驗證 email 格式,required|email 不能有空格,不然會錯誤。
- 使用 errors.first('email') 顯示錯誤提示
送出表單驗證
十五、 Vue-CLI 3
1. Vue CLI 2 和 3 的差別
- 提供完整的 GUI 套件
- 只提供一個核心,提供其他插件
- 設定檔提供 GUI 介面
2. 安裝
- 如果有安裝 CLI2 要先透過 npm uninstall vue-cli -g 刪除
- 輸入 npm install -g @vue/cli 安裝 CLI3
3. 環境變數的設定
新增 .env 的檔案
- .env.local 會被 .gitignore 加入,因此不會加入版控,不會被上傳到 Github
- .env.[mode] 可以指定在特定模式下載入這個環境變數
可以到 package.json 下。找到
然後命名 .env.test,這樣就能指定特定的環境變數了
的預設,且權重比單純的 .dev 重
的預設
4. 使用 Vue GUI
使用 vue ui 指令叫出 GUI 工具
十六、Vuex 管理大型網站資料狀態
1. Vuex 的組成
- state ===> 資料型態
- action ===> 如同 method,但他只進行非同步的行為及取得資料
- getter ===> 如同 computed,為資料呈現的方式
- mutation ===> 改變資料內容的方法

2. 新增一個 Store
a. 安裝 Vuex
- 在 src 根目錄下創建 store 的資料夾,裡面存放 index.js
index.js 裡面
b. 使用 computed 將 store 的資料撈出來
c. 使用的變數改從 store 取出
3. 正確的使用 action 和 mutation 來取得變數
a. 如果有使用到非同步行為,要寫在 action 裡面,再去呼叫 mutation
b. 改變 state 狀態的行為一定要寫在 mutation 裡面
c. 使用嚴謹模式 strict = true,在 vuex 裡面有不符合語法的操作就會跳錯
- dispatch 呼叫 action 中的 updateloading,並把 status = true 傳入
- action 被呼叫後,去呼叫 mutation 執行 Loading
- mutation 裡的 LOADING 會以大寫的方式呈現,以代表常數,這邊會呼叫 state 裡面的 isLoading,去改變它的 stutus 狀態為 true
4. 使用 Actions 取得遠端資料
將需要用 AJAX 取值得資料放到 action 裡面,
需要更該 state 值的部分則放到 mutation
5. payload 傳遞物件參數
在 action 中的 payload 參數只能帶一個值,因此有多於一個的值的參數,可以把它包成物件傳遞,傳到 action 時會使用解構的方式帶入參數。
6. Vuex 中的 Getters 及 mapGetters, mapActions
a. Getter 類似於 computed
- 可以統一將 computed 的內容寫在 getters 裡面,再使用 mapgetters 取出
b. mapActions 有一樣的功能,可以把沒帶參數的 action 統一寫在一起
7.模組化資料運用
簡化程式碼,將 index.js 拆分為各個模塊
- 新增一個新的檔案,將要拆出來的 modules 元件放入
- import moduldes
- state 為模塊變數,而 action, mutation, getters 屬於全域變數
因此如果要讀取 module 裡的 state 要加上模組名稱
- 如果要讓 action, mutation, getters 變成區域變數可以加上 namespaced: true,
這時的 mapAction 、mapGetters 要加上模組名稱
如果要維持原來全域的特性,可以加上 { root: true }