title: Vue框架介紹與ES6ES7語法html
categories: Vue前端
tags: ["庫與框架區別","MVVM與MVC","指令","基本代碼",方法,配置對象,過濾器,生命週期,axios請求,全局組件,"ES6","ES7"]vue
date: 2018-05-22 12:10:18node
前端框架Vuewebpack
框架與庫的區別ios
小而巧爲庫,大而全爲框架web
庫ajax
框架數據庫
介紹MVVM與MVCnpm
MVC 是後端開發思想,分爲三個部分
MVVM 前端頁面的分層開發思想,把一個完整的頁面分紅了三部分
Model(頁面中須要的數據),這裏所指的是:data部分
基本代碼詳情
/** * 容器就是 MVVM 中的 View * * 實例對象就是 MVVM 中的 VM, 被稱爲調度者 * * data就是 MVVM 中的 Model */ 1. 導入Vue包 <script src = "vue-2.5.15.js"></script> 2. 添加一個容器, 未來被Vue控制 <div id = "box">{{msg}}</div> 3. 建立Vue的實例對象 const vm = new Vue({ // 3.1 el傳入的是選擇器, 頁面要控制的元素 el: "#box", data: { // 3.2 用data渲染數據 msg: "Hello Vue", flag: true }, // 能夠綁定事件處理函數 methods: { }, }) /** * VM的實例對象, 會監聽data中每一項的數據變化, 只要一變化, VM就會從新把el指定區域全部的指 * 令從新解析一遍 * data中的數據, 在每一個methods方法中都共享 * */
Vue指令
表達式就是指令,若是想讓指令生效必須放到el的容器裏,他有控制HTML的能力,v-系列插入屬性節點,插值表達式插入內容區域
插值表達式
<p>{{msg}}</p>
v-cloak
在外層的元素添加 v-cloak ,並且須要在style樣式表中添加一個屬性
<style>
[v-cloak] { display: none; }
<style>
<div id="box" v-cloak></div>
v-text
<h1 v-text = "msg"></h1>
<h1 v-text = "msg + '拼接字符串'"></h1>
v-html
渲染標籤
<div v-html = "msg"></div>
data: {
msg: "<h1>文本</h1>"
}
v-bind
能夠單向數據綁定 model => view
<!-- 完整版 -->
<img v-bind:src = "images"/>
<!-- 簡寫版 -->
<img :src = "images"/>
data: {
images: "./img/01.png"
}
v-on
定義事件名時能夠進行傳參操做,添加()便可
<!-- 示例 -->
<button v-on:事件名稱 = "btn"></button>
<!-- ()進行傳參 -->
<button v-on:click = "btn(111)"></button>
<!-- 原始版 -->
<button v-on:click = "btn"></button>
<!-- 簡化版 -->
<button @:click = "btn"></button>
methods: {
// 原始版 btn: function(str){ console.log(str); }, // 簡化版 btn(str){ console.log(str); }
}
v-model
data <----> 頁面
<input type = "type" v-model = "msg"/>
data: {
msg: "雙向數據綁定"
}
v-for與:key
v-for(遍歷的item項, 索引) in 數組 :key="item.id"
儘可能使用v-for時,要添加:key,取值:number與string
<!-- 正式版 -->
<li v-for = "(item, i) in arr" :key="item.id">
<p>索引: {{i}}, 值: {{item}}</p>
</li>
<!-- 簡寫版 -->
<li v-for="item in arr" :key="item.id">{{item}}</li>
data: {
arr: ["張三", "李四", "王五"]
}
v-if與v-show
應用場景: 切換次數多使用 v-show,切換次數少使用 v-if
<!-- v-if 語法 -->
<button @click="flag=!=flag"></button>
<h1 v-if="flag">顯示與隱藏</h1>
<!-- v-show 語法 -->
<button @click="flag"></button>
<h1 v-show="flag">顯示與隱藏</h1>
data: {
flag: true
}
v-if與v-else
<button @click="flag=!flag"></button> <h1 v-if="flag">顯示</h1> <h1 v-else>隱藏</h1> data { flag: true }
綁定class樣式
綁定具體類名
.a{color: red;}
.b{font-size: 18px;}
/ 固定版 /
<h1 :class="['a', 'b']"></h1>
/ 動態版 /
<h1 :class="[flag ? a : b]"></h1>
<button @click="flag=!flag">切換</button>
data: {
flag: true
}
方法
方法-Vue.$set()
應用場景: 若是想在data動態一個值,就須要此方法
{{user.name}}
data: {
user: {name: "zs"}
}
methods: {
add(){ this.$set(this.user, "age", 18) }
}
方法-Vue.$mount()
若是el與$mount同時使用了, el優先級最高
let vm = new Vue({
data:{}, methods: {}
})
vm.$mount("#box");
配置對象
渲染模板template
此優先級比el高,會把el的覆蓋並替換
<h3>{{msg}}</h3>
let vm = new Vue({
el: "#box", template: "<h1>{{msg}}</h1>", data: { msg: "Vue" }
})
過濾器
輸出數據時,須要對數據進行格式上的處理,並將結果呈現到頁面上,使用Vue提供的過濾器
能夠連續設置過濾器
<p>{{str | dateFormat}}</p>
<!-- 調用傳參 -->
<p>{{str | dateFormat()}}</p>
data: {
str: "2018-01-25T02:02.045z"
}
建立全局過濾器
須要在全局建立
Vue.filter("dateFormat", (originVal)=>{
const dt = new Date(originVal) const y = dt.getFullYear(); return y;
})
建立私有過濾器
只能被當前所屬的實例所控制的區域使用
let vm = new Vue({
el: "", filters: { 過濾器名稱: ()=>{ } }
})
實例生命週期
每個vm實例,在建立、運行、銷燬的三個階段,都會依次觸發事件,這些事件就是生命週期函數
生命週期鉤子(別名)=生命週期函數=生命週期事件
生命週期函數分類
建立期間的生命週期函數(一生只執行一次)
運行期間的生命週期函數
銷燬期間的生命週期函數
生命週期函數介紹
beforeCreate: ()=>{} 比方科瑞特
created: ()=>{} 科瑞唉特d
beforeMount: ()=>{} 比方忙特
mounted: ()=>{} 忙提特
beforeUpdate: ()=>{}
updated: ()=>{}
beforeDestroy: ()=>{}
destroyed: ()=>{}
使用axios發起ajax請求
axios只能發起get與post請求,沒法發起jsonp請求,若是涉及到jsonp能夠在後端設置CORS跨域資源共享
請求方式
axios
vue-resource
語法
在引入axios包時,全局就多了一個axios成員
get請求
// 返回值是 promise 實例對象 let result = axios.get("地址?請求參數"); // 經過 then 指定回調, 就能夠拿到服務器返回的數據 result.then((myresult)=>{ // 返回數據就在 myresult.data 身上 console.log(myresult); })
Vue中使用get請求
<button @click="btn"></button> // 須要在全局下設置 Vue.prototype.$http = axios; methods: { btn(){ //1. 調用axios發起get請求, 返回值是實例對象, 調用實例對象的 axios.get("地址").then((result)=>{ result.data }); //2. this.$http.get("地址").then((result)=>{ result.data }) } }
post請求
axios.post("地址", {name: "zs", age: 18}).then(()=>{ })
axios高級用法
全局配置請求API的跟路徑
// 全局配置 axios 請求 API 接口時候的根路徑 axios.defaults.baseURL = "http://www.liulongbin.top:3005"; Vue.prototype.$http = axios;
攔截器實現loading效果
攔截器分兩部分
請求開始時候的攔截器
請求完畢之後的攔截器
動畫
只能實現簡單的動畫,內容須要 transition 標籤才能實現過渡動畫,動畫須要在style標籤內設置
動畫分爲兩部分
入場時候
離場時候
第三庫動畫庫
單個元素使用
給 transition 添加入場與離場動畫
多個元素使用
計算屬性
若是計算屬性所指向的 function 中, data上的數據發生了變化,則會從新計算屬性從新求值
computed: {
funllname: function(){}
}
Vue配置webpack
安裝傳統的安裝webpack,在導入Vue組件的時候會出現報錯,由於默認導入時閹割版的Vue,開發時須要手動進行指定正常版的Vue,並導入進去
在 index.js 中使用 import 導入 vue 模塊:
import Vue from 'vue'
在 index.html 中建立未來要被 vm 實例控制的 div:
<!-- 未來,這個 div 就是 Vue實例 要控制的區域 --> <div id="#app"></div>
在 index.js 中建立 vm 實例,並使用 el 指定要控制的區域,使用 data 指定要渲染的數據:
const vm = new Vue({ el: '#app', // 要控制的區域 data: { msg: 'ok' // 要渲染的數據 } })
關於基於webpack的vue項目報錯
如何讓 import 導入最全的 vue 包呢?
組件
模塊化和組件化概念
模塊化:以代碼角度思考, 把可複用的代碼,抽離爲單獨的模塊
組件化:以UI角度思考, 把可複用的UI結構,抽離爲單獨的模塊
定義組件