Vue.js 是目前最火的一個前端框架,React是最流行的一個前端框架(React除了開發網站,還能夠開發手機App, Vue語法也是能夠用於進行手機App開發的,須要藉助於Weex)html
Vue.js 是前端的主流框架之一,和Angular.js、React.js 一塊兒,併成爲前端三大主流框架!前端
Vue.js 是一套構建用戶界面的框架,只關注視圖層,它不只易於上手,還便於與第三方庫或既有項目整合。(Vue有配套的第三方類庫,能夠整合起來作大型項目的開發)vue
v-text
和v-html
v-cloak : 可以解決插值表達式的網速不佳時的閃爍問題
v-text : 1.沒有閃爍問題
2.會覆蓋元素原有的值
v-html :1.會覆蓋元素原有的值
2.渲染html元素
v-bind
的三種用法v-bind :用於綁定屬性的指令,綁定的值符合js編碼規範
直接使用指令v-bind
數組
使用簡化指令 :
前端框架
在綁定的時候,拼接綁定內容::title="btnTitle + ', 這是追加的內容'"
架構
v-bind
縮寫
<!-- 完整語法 --> <a v-bind:href="url">...</a> <!-- 縮寫 --> <a :href="url">...</a>
v-on
v-on :用於綁定事件
v-on
縮寫<!-- 完整語法 --> <a v-on:click="doSomething">...</a> <!-- 縮寫 --> <a @click="doSomething">...</a>
案例:跑馬燈效果app
1.html解構
<div id="app"> <p>{{info}}</p> <input type="button" value="開啓" v-on:click="go"> <input type="button" value="中止" v-on:click="stop"> </div>
2. vue實例框架
// 建立 Vue 實例,獲得 ViewModel
var vm = new Vue({
el: '#app',
data: {
info: '猥瑣發育,別浪~!',
intervalId: null
},
methods: {
go() {
// 若是當前有定時器在運行,則直接return
if (this.intervalId != null) {
return;
}
// 開始定時器
this.intervalId = setInterval(() => {
this.info = this.info.substring(1) + this.info.substring(0, 1);
}, 500);
},
stop() {
clearInterval(this.intervalId);
}
}
});
事件修飾符
.stop 阻止冒泡性能
.prevent 阻止默認事件網站
.capture 添加事件偵聽器時使用事件捕獲模式
.self 只當事件在該元素自己(好比不是子元素)觸發時觸發回調
.once 事件只觸發一次
v-model
和雙向數據綁定
v-model : 實現表單元素 和 model 中數據的雙向綁定
*注意:只能運用在表單元素中*
案例:簡易計算器
1.html結構
<div id="app"> <input type="text" v-model="n1"> <select v-model="opt"> <option value="0">+</option> <option value="1">-</option> <option value="2">*</option> <option value="3">÷</option> </select> <input type="text" v-model="n2"> <input type="button" value="=" v-on:click="getResult"> <input type="text" v-model="result"> </div>
2.vue實例
// 建立 Vue 實例,獲得 ViewModel var vm = new Vue({ el: '#app', data: { n1: 0, n2: 0, result: 0, opt: '0' }, methods: { getResult() { switch (this.opt) { case '0': this.result = parseInt(this.n1) + parseInt(this.n2); break; case '1': this.result = parseInt(this.n1) - parseInt(this.n2); break; case '2': this.result = parseInt(this.n1) * parseInt(this.n2); break; case '3': this.result = parseInt(this.n1) / parseInt(this.n2); break; } } } });
<h1 :class="['red', 'thin']">這是一個邪惡的H1</h1>
2.數組中使用三元表達式
<h1 :class="['red', 'thin', isactive?'active':'']">這是一個邪惡的H1</h1>
3.數組中嵌套對象
<h1 :class="['red', 'thin', {'active': isactive}]">這是一個邪惡的H1</h1>
4.直接使用對象
<h1 :class="{red:true, italic:true, active:true, thin:true}">這是一個邪惡的H1</h1>
:style
的形式,書寫樣式對象<h1 :style="{color: 'red', 'font-size': '40px'}">這是一個善良的H1</h1>
2.將樣式對象,定義到 data
中,並直接引用到 :style
中
data: { h1StyleObj: { color: 'red', 'font-size': '40px', 'font-weight': '200' } }
<h1 :style="h1StyleObj">這是一個善良的H1</h1>
3.在 :style
中經過數組,引用多個 data
上的樣式對象
data: { h1StyleObj: { color: 'red', 'font-size': '40px', 'font-weight': '200' }, h1StyleObj2: { fontStyle: 'italic' } }
<h1 :style="[h1StyleObj, h1StyleObj2]">這是一個善良的H1</h1>
v-for
和key
屬性<ul> <li v-for="(item, i) in list">索引:{{i}} --- 姓名:{{item.name}} --- 年齡:{{item.age}}</li> </ul>
2.迭代對象中的屬性
<div v-for="(val, key, i) in userInfo">{{val}} --- {{key}} --- {{i}}</div>
3.迭代數字
<p v-for="i in 10">這是第 {{i}} 個P標籤</p>
***注意***
2.2.0+ 的版本里,當在組件中使用 v-for 時,key 如今是必須的。
當 Vue.js 用 v-for 正在更新已渲染過的元素列表時,它默認用 「就地複用」 策略。若是數據項的順序被改變,Vue將不是移動 DOM 元素來匹配數據項的順序, 而是簡單複用此處每一個元素,而且確保它在特定索引下顯示已被渲染過的每一個元素。
爲了給 Vue 一個提示,以便它能跟蹤每一個節點的身份,從而重用和從新排序現有元素,你須要爲每項提供一個惟一 key 屬性
v-if
和v-show
v-if : 條件爲假,移除元素,條件爲真,建立元素 *注意:存在較高的性能消耗*v-show : 條件爲假,隱藏元素,條件爲真,顯示元素 *注意:存在較高的初始渲染消耗*