vue快速入門基礎(chǔ)知識(shí)教程
VUE是一套前端框架,免除了原生JavaScript中的DOM操作,簡(jiǎn)化書寫。VUE基于MVVM(Model-View_ViewModel)思想,實(shí)現(xiàn)數(shù)據(jù)雙向綁定。
Vue的核心庫(kù)只關(guān)注圖層.響應(yīng)式數(shù)據(jù)綁定和組件化開發(fā)是其兩大特點(diǎn).
響應(yīng)式數(shù)據(jù)綁定指的是vue.js會(huì)自動(dòng)對(duì)頁(yè)面中的某些數(shù)據(jù)的變化做出響應(yīng).(v-model指令可以實(shí)現(xiàn)數(shù)據(jù)的雙向綁定)
組件化開發(fā)指的是vue.js通過(guò)組件,把一個(gè)單頁(yè)應(yīng)用中的各種模塊拆分到一個(gè)個(gè)單獨(dú)的組件(component)中,我們只要先在父級(jí)組件中寫好各種組件標(biāo)簽,并且在組件標(biāo)簽中寫好要傳入組件的參數(shù),然后在寫好各種組件的實(shí)現(xiàn),整個(gè)應(yīng)用就可以完成了.
1 初識(shí)Vue
想讓Vue工作,就必須創(chuàng)建一個(gè)Vue實(shí)例,且要傳入一個(gè)配置對(duì)象
demo容器里的代碼依然符合html規(guī)范,只不過(guò)混入了一些特殊的Vue語(yǔ)法
demo容器里的代碼被稱為【Vue模板】
Vue實(shí)例和容器是一一對(duì)應(yīng)的
真實(shí)開發(fā)中只有一個(gè)Vue實(shí)例,并且會(huì)配合著組件一起使用
{{xxx}}是Vue的語(yǔ)法:插值表達(dá)式,{{xxx}}可以讀取到data中的所有屬性
一旦data中的數(shù)據(jù)發(fā)生改變,那么頁(yè)面中用到該數(shù)據(jù)的地方也會(huì)自動(dòng)更新(Vue實(shí)現(xiàn)的響應(yīng)式)
初始示例代碼
<!-- 準(zhǔn)備好一個(gè)容器 -->
<div id="demo">
<h1>Hello,{{name.toUpperCase()}},{{address}}</h1>
</div>
<script type="text/javascript" >
Vue.config.productionTip = false //阻止 vue 在啟動(dòng)時(shí)生成生產(chǎn)提示。
//創(chuàng)建Vue實(shí)例
new Vue({
el:'#demo', //el用于指定當(dāng)前Vue實(shí)例為哪個(gè)容器服務(wù),值通常為css選擇器字符串。
data:{ //data中用于存儲(chǔ)數(shù)據(jù),數(shù)據(jù)供el所指定的容器去使用,值我們暫時(shí)先寫成一個(gè)對(duì)象。
name:'hello,world',
address:'北京'
}
});
</script>
2 模板語(yǔ)法
Vue模板語(yǔ)法有2大類:
插值語(yǔ)法:
功能:用于解析標(biāo)簽體內(nèi)容
寫法:{{xxx}},xxx是js表達(dá)式,且可以直接讀取到data中的所有屬性
指令語(yǔ)法:
功能:用于解析標(biāo)簽(包括:標(biāo)簽屬性、標(biāo)簽體內(nèi)容、綁定事件…)
舉例:v-bind:href=“xxx” 或 簡(jiǎn)寫為 :href=“xxx”,xxx同樣要寫js表達(dá)式,且可以直接讀取到data中的所有屬性
<div id="root">
<h1>插值語(yǔ)法</h1>
<h3>你好,{{name}}</h3>
<hr/>
<h1>指令語(yǔ)法</h1>
<!-- 這里是展示被Vue指令綁定的屬性,引號(hào)內(nèi)寫的是js表達(dá)式 -->
<a :href="school.url.toUpperCase()" rel="external nofollow" x="hello">點(diǎn)我去{{school.name}}學(xué)習(xí)1</a>
<a :href="school.url" rel="external nofollow" x="hello">點(diǎn)我去{{school.name}}學(xué)習(xí)2</a>
</div>
<script>
new Vue({
el:'#root',
data:{
name:'jack',
school:{
name:'百度',
url:'http://www.baidu.com',
}
}
})
</script>
3 數(shù)據(jù)綁定
Vue中有2種數(shù)據(jù)綁定的方式:
單向綁定(v-bind):數(shù)據(jù)只能從data流向頁(yè)面
雙向綁定(v-model):數(shù)據(jù)不僅能從data流向頁(yè)面,還可以從頁(yè)面流向data
tips:
1.雙向綁定一般都應(yīng)用在表單類元素上(如:input、select等)
2.v-model:value 可以簡(jiǎn)寫為 v-model,因?yàn)関-model默認(rèn)收集的就是value值
<div id="root">
<!-- 普通寫法 單向數(shù)據(jù)綁定 -->
單向數(shù)據(jù)綁定:<input type="text" v-bind:value="name"><br/>
雙向數(shù)據(jù)綁定:<input type="text" v-model:value="name"><br/>
<!-- 簡(jiǎn)寫 v-model:value 可以簡(jiǎn)寫為 v-model,因?yàn)関-model默認(rèn)收集的就是value值-->
單向數(shù)據(jù)綁定:<input type="text" :value="name"><br/>
雙向數(shù)據(jù)綁定:<input type="text" v-model="name"><br/>
</div>
<script>
new Vue({
el:'#root',
data:{
name:'jack',
}
})
</script>
4 事件處理
事件的基本使用:
- 使用v-on:xxx 或 @xxx 綁定事件,其中xxx是事件名
- 事件的回調(diào)需要配置在methods對(duì)象中,最終會(huì)在vm上
- methods中配置的函數(shù),都是被Vue所管理的函數(shù),this的指向是vm 或 組件實(shí)例對(duì)象
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
<h2>歡迎來(lái)到{{name}}學(xué)習(xí)</h2>
<!-- <button v-on:click="showInfo">點(diǎn)我提示信息</button> -->
<button @click="showInfo1">點(diǎn)我提示信息1(不傳參)</button>
<!-- 主動(dòng)傳事件本身 -->
<button @click="showInfo2($event,66)">點(diǎn)我提示信息2(傳參)</button>
</div>
<script>
const vm = new Vue({
el:'#root',
data:{
name:'vue',
},
methods:{
// 如果vue模板沒(méi)有寫event,會(huì)自動(dòng)傳 event 給函數(shù)
showInfo1(event){
// console.log(event.target.innerText)
// console.log(this) //此處的this是vm
alert('同學(xué)你好!')
},
showInfo2(event,number){
console.log(event,number)
// console.log(event.target.innerText)
// console.log(this) //此處的this是vm
alert('同學(xué)你好!!')
}
}
});
</script>
Vue中的事件修飾符
- prevent:阻止默認(rèn)事件(常用)
- stop:阻止事件冒泡(常用)
- once:事件只觸發(fā)一次(常用)
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
<h2>歡迎來(lái)到{{name}}學(xué)習(xí)</h2>
<!-- 阻止默認(rèn)事件(常用) -->
<a rel="external nofollow" @click.prevent="showInfo">點(diǎn)我提示信息</a>
<!-- 阻止事件冒泡(常用) -->
<div class="demo1" @click="showInfo">
<button @click.stop="showInfo">點(diǎn)我提示信息</button>
<!-- 修飾符可以連續(xù)寫 -->
<!-- <a rel="external nofollow" @click.prevent.stop="showInfo">點(diǎn)我提示信息</a> -->
</div>
<!-- 事件只觸發(fā)一次(常用) -->
<button @click.once="showInfo">點(diǎn)我提示信息</button>
</div>
5 鍵盤事件
鍵盤事件語(yǔ)法糖:@keydown,@keyup
Vue中常用的按鍵別名:
- 回車 => enter
- 刪除 => delete
- 退出 => esc
- 空格 => space
- 換行 => tab (特殊,必須配合keydown去使用)
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
<h2>歡迎來(lái)到{{name}}學(xué)習(xí)</h2>
<input type="text" placeholder="按下回車提示輸入" @keydown.enter="showInfo">
</div>
<script>
new Vue({
el:'#root',
data:{
name:'浙江理工大學(xué)'
},
methods: {
showInfo(e){
// console.log(e.key,e.keyCode)
console.log(e.target.value)
}
},
})
</script>
6 條件渲染
v-if
寫法:
(1).v-if=“表達(dá)式”
(2).v-else-if=“表達(dá)式”
(3).v-else=“表達(dá)式”
適用于:切換頻率較低的場(chǎng)景
特點(diǎn):不展示的DOM元素直接被移除
注意:v-if可以和:v-else-if、v-else一起使用,但要求結(jié)構(gòu)不能被“打斷”
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
<!-- 使用v-if做條件渲染 -->
<h2 v-if="false">歡迎來(lái)到{{name}}</h2>
<h2 v-if="1 === 1">歡迎來(lái)到{{name}}</h2>
<!-- v-else和v-else-if -->
<div v-if="n === 1">Angular</div>
<div v-else-if="n === 2">React</div>
<div v-else-if="n === 3">Vue</div>
<div v-else>哈哈</div>
<!-- v-if與template的配合使用 -->
<!-- 就不需要寫好多個(gè)判斷,寫一個(gè)就行 -->
<!-- 這里的思想就像事件代理的使用 -->
<template v-if="n === 1">
<h2>你好</h2>
<h2>尚硅谷</h2>
<h2>北京</h2>
</template>
</div>
<script>
const vm = new Vue({
el:'#root',
data:{
styleArr:[
{
fontSize: '40px',
color:'blue',
},
{
backgroundColor:'gray'
}
]
}
})
</script>
v-show
寫法:v-show=“表達(dá)式”
適用于:切換頻率較高的場(chǎng)景
特點(diǎn):不展示的DOM元素未被移除,僅僅是使用樣式隱藏掉(display:none)
備注:使用v-if的時(shí),元素可能無(wú)法獲取到,而使用v-show一定可以獲取到
v-if 是實(shí)打?qū)嵉馗淖僤om元素,v-show 是隱藏或顯示dom元素
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
<!-- 使用v-show做條件渲染 -->
<h2 v-show="false">歡迎來(lái)到{{name}}</h2>
<h2 v-show="1 === 1">歡迎來(lái)到{{name}}</h2>
</div>
7 列表渲染
v-for指令
- 用于展示列表數(shù)據(jù)
- 語(yǔ)法:v-for=“(item, index) in xxx” :key=“yyy”
- 可遍歷:數(shù)組、對(duì)象、字符串(用的很少)、指定次數(shù)(用的很少)
<div id="root">
<!-- 遍歷數(shù)組 -->
<h2>人員列表(遍歷數(shù)組)</h2>
<ul>
<li v-for="(p,index) of persons" :key="index">
{{p.name}}-{{p.age}}
</li>
</ul>
<!-- 遍歷對(duì)象 -->
<h2>汽車信息(遍歷對(duì)象)</h2>
<ul>
<li v-for="(value,k) of car" :key="k">
{{k}}-{{value}}
</li>
</ul>
<!-- 遍歷字符串 -->
<h2>測(cè)試遍歷字符串(用得少)</h2>
<ul>
<li v-for="(char,index) of str" :key="index">
{{char}}-{{index}}
</li>
</ul>
<!-- 遍歷指定次數(shù) -->
<h2>測(cè)試遍歷指定次數(shù)(用得少)</h2>
<ul>
<li v-for="(number,index) of 5" :key="index">
{{index}}-{{number}}
</li>
</ul>
</div>
<script>
const vm = new Vue({
el:'#root',
data: {
persons: [
{ id: '001', name: '張三', age: 18 },
{ id: '002', name: '李四', age: 19 },
{ id: '003', name: '王五', age: 20 }
],
car: {
name: '奧迪A8',
price: '70萬(wàn)',
color: '黑色'
},
str: 'hello'
}
})
</script>
8 生命周期
Vue 實(shí)例有一個(gè)完整的?命周期,也就是從new Vue()、初始化事件(.once事件)和生命周期、編譯模版、掛載Dom -> 渲染、更新 -> 渲染、卸載 等一系列過(guò)程,稱這是Vue的生命周期。
beforeCreate(創(chuàng)建前):數(shù)據(jù)監(jiān)測(cè)(getter和setter)和初始化事件還未開始,此時(shí) data 的響應(yīng)式追蹤、event/watcher 都還沒(méi)有被設(shè)置,也就是說(shuō)不能訪問(wèn)到data、computed、watch、methods上的方法和數(shù)據(jù)。
created(創(chuàng)建后):實(shí)例創(chuàng)建完成,實(shí)例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但是此時(shí)渲染得節(jié)點(diǎn)還未掛載到 DOM,所以不能訪問(wèn)到 $el屬性。
beforeMount(掛載前):在掛載開始之前被調(diào)用,相關(guān)的render函數(shù)首次被調(diào)用。此階段Vue開始解析模板,生成虛擬DOM存在內(nèi)存中,還沒(méi)有把虛擬DOM轉(zhuǎn)換成真實(shí)DOM,插入頁(yè)面中。所以網(wǎng)頁(yè)不能顯示解析好的內(nèi)容。
mounted(掛載后):在el被新創(chuàng)建的 vm.$el(就是真實(shí)DOM的拷貝)替換,并掛載到實(shí)例上去之后調(diào)用(將內(nèi)存中的虛擬DOM轉(zhuǎn)為真實(shí)DOM,真實(shí)DOM插入頁(yè)面)。此時(shí)頁(yè)面中呈現(xiàn)的是經(jīng)過(guò)Vue編譯的DOM,這時(shí)在這個(gè)鉤子函數(shù)中對(duì)DOM的操作可以有效,但要盡量避免。一般在這個(gè)階段進(jìn)行:開啟定時(shí)器,發(fā)送網(wǎng)絡(luò)請(qǐng)求,訂閱消息,綁定自定義事件等等
beforeUpdate(更新前):響應(yīng)式數(shù)據(jù)更新時(shí)調(diào)用,此時(shí)雖然響應(yīng)式數(shù)據(jù)更新了,但是對(duì)應(yīng)的真實(shí) DOM 還沒(méi)有被渲染(數(shù)據(jù)是新的,但頁(yè)面是舊的,頁(yè)面和數(shù)據(jù)沒(méi)保持同步呢)。
updated(更新后) :在由于數(shù)據(jù)更改導(dǎo)致的虛擬DOM重新渲染和打補(bǔ)丁之后調(diào)用。此時(shí) DOM 已經(jīng)根據(jù)響應(yīng)式數(shù)據(jù)的變化更新了。調(diào)用時(shí),組件 DOM已經(jīng)更新,所以可以執(zhí)行依賴于DOM的操作。然而在大多數(shù)情況下,應(yīng)該避免在此期間更改狀態(tài),因?yàn)檫@可能會(huì)導(dǎo)致更新無(wú)限循環(huán)。該鉤子在服務(wù)器端渲染期間不被調(diào)用。
beforeDestroy(銷毀前):實(shí)例銷毀之前調(diào)用。這一步,實(shí)例仍然完全可用,this 仍能獲取到實(shí)例。在這個(gè)階段一般進(jìn)行關(guān)閉定時(shí)器,取消訂閱消息,解綁自定義事件。
destroyed(銷毀后):實(shí)例銷毀后調(diào)用,調(diào)用后,Vue 實(shí)例指示的所有東西都會(huì)解綁定,所有的事件監(jiān)聽器會(huì)被移除,所有的子實(shí)例也會(huì)被銷毀。該鉤子在服務(wù)端渲染期間不被調(diào)用。
9 總結(jié)
到此這篇關(guān)于vue快速入門基礎(chǔ)知識(shí)教程的文章就介紹到這了,更多相關(guān)vue快速入門教程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于vue中解決v-for使用報(bào)紅并出現(xiàn)警告的問(wèn)題
下面小編就為大家分享一篇基于vue中解決v-for使用報(bào)紅并出現(xiàn)警告的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
vue2 如何實(shí)現(xiàn)div contenteditable=“true”(類似于v-model)的效果
這篇文章主要給大家介紹了利用vue2如何實(shí)現(xiàn)div contenteditable="true",就是類似于v-model的效果,文中給出了兩種解決的思路,對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2017-02-02
vue前端自適應(yīng)布局實(shí)現(xiàn)教程(一步到位所有自適應(yīng))
?自適應(yīng)布局是一種根據(jù)不同的設(shè)備屏幕分辨率進(jìn)行布局的方式,它為不同的屏幕分辨率定義了不同的布局,下面這篇文章主要給大家介紹了關(guān)于vue前端自適應(yīng)布局實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2024-08-08
vue內(nèi)置組件component--通過(guò)is屬性動(dòng)態(tài)渲染組件操作
這篇文章主要介紹了vue內(nèi)置組件component--通過(guò)is屬性動(dòng)態(tài)渲染組件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise實(shí)現(xiàn)基本
這篇文章主要介紹了Vue使用vue-recoure + http-proxy-middleware + vuex配合promise實(shí)現(xiàn)基本的跨域請(qǐng)求封裝問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
Vue3實(shí)現(xiàn)一個(gè)可左右滑動(dòng)操作組件的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Vue3實(shí)現(xiàn)一個(gè)可左右滑動(dòng)操作組件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Vue有一定幫助,感興趣的可以學(xué)一下2022-11-11

