Vue的基本知識(shí)你都了解嗎
1. Vue的基本知識(shí)
1.1 Vue的使用
- 可以導(dǎo)入Vue文件或者是通過(guò)CDN引入
- 想要讓Vue工作就必須要?jiǎng)?chuàng)建一個(gè)Vue的實(shí)例對(duì)象,并且配置對(duì)象
- 在真實(shí)的開發(fā)中只有一個(gè)Vue的實(shí)例,并且配合組件一起使用
1.2 插值語(yǔ)法
<div>
<h1>
Hello!{{name}} {{Date.now()}} {{address}}
</h1>
</div>
<script>
Vue.config.productionTip = false //阻止vue在生成時(shí)自動(dòng)產(chǎn)生提示
//創(chuàng)建Vue實(shí)例
new Vue({
el:'#root', //el用于指定當(dāng)前Vue實(shí)例為哪個(gè)容器服務(wù),值通常為css選擇器字符串。
data:{ //data中用于存儲(chǔ)數(shù)據(jù),數(shù)據(jù)供el所指定的容器去使用,值我們暫時(shí)先寫成一個(gè)對(duì)象。
name:'Tree',
address:'China'
}
})
</script>
注意點(diǎn):
1.{ { xxx } } 這里的xxx要寫的是js表達(dá)式,并且它會(huì)自動(dòng)讀取到data中所有的屬性
2.一旦data中的數(shù)據(jù)發(fā)生改變,那么頁(yè)面用帶該數(shù)據(jù)的地方也會(huì)自動(dòng)更新
3.插值語(yǔ)法的功能:用于去解析標(biāo)簽體內(nèi)容,標(biāo)簽體就是起始標(biāo)簽和結(jié)束標(biāo)簽中間的內(nèi)容,例如:<h1> xxx </h1> xxx就是標(biāo)簽體
4.要區(qū)分什么是js表達(dá)式?什么是js代碼?
1. 什么是js表達(dá)式?
表達(dá)式可以產(chǎn)生一個(gè)值或者返回一個(gè)值
(1) a = 1
(2) a+b
(3) Date.now() 函數(shù)
(4) x = Y ? 1 : 2
2. 什么是js代碼?(語(yǔ)句)
(1) if(){}
(2) for(){}
js表達(dá)式就是一種特殊的js代碼
1.3 v-bind(單向綁定)
? 指令語(yǔ)法有很多,下面例子只是其中一個(gè) v-bind: ===> 可以簡(jiǎn)寫為 :
? 加入該指令后 " " 里的內(nèi)容就會(huì)變成js表達(dá)式,而不是字符串(這個(gè)知識(shí)點(diǎn)很重要后面使用的地方會(huì)很多)
? 該方法是解析標(biāo)簽得屬性,指令的功能很強(qiáng)大可以解析標(biāo)簽(例如:解析標(biāo)簽體,標(biāo)簽屬性,綁定事件)
<div class="wrapper">
<h1>你好??!{{name}}</h1>
<hr>
<a :href="school.url">點(diǎn)擊進(jìn)入{{school.name}}</a>
<a v-bind:href="school.url">點(diǎn)擊進(jìn)入{{school.name}}</a>
</div>
<script>
Vue.config.productionTip = false
new Vue({
el:".wrapper",
data:{
name:"Tree",
school:{
name: "bilibili",
url:"https://www.bilibili.com/"
}
}
})
</script>
1.4 v-model(雙向綁定)
1.4.1 v-model和v-bind的區(qū)別
- v-bind(單項(xiàng)綁定):數(shù)據(jù)只能從data流向頁(yè)面
- v-model(雙向綁定):不僅數(shù)據(jù)從data流向頁(yè)面,而且可以從頁(yè)面流向data
- 雙向綁定一般用在表單類元素上面(input,select,含有value屬性值)
- 如果遇到像checkbox這種類型的沒(méi)有value值時(shí),v-model/ v-bind 傳boolearn值可以去控制該類型的狀態(tài)
<div class="wrapper">
<!-- 普通寫法 -->
<!-- 單項(xiàng)數(shù)據(jù)綁定: <input type="text" v-bind:value="name"><br>
雙向數(shù)據(jù)綁定: <input type="text" v-model:value="name"> -->
<!-- 簡(jiǎn)便寫法 -->
單項(xiàng)數(shù)據(jù)綁定: <input type="text" :value="name"><br>
雙向數(shù)據(jù)綁定: <input type="text" v-model="name">
</div>
<script>
Vue.config.productionTip = false
new Vue({
el:".wrapper",
data:{
name:"Hello"
}
})
</script>
1.4.2 v-model 簡(jiǎn)單小例子
<div class="root">
<input type="text" v-model="message">
<p>{{message}}</p>
</div>
<script>
Vue.config.productionTip = false //阻止vue在生成時(shí)自動(dòng)產(chǎn)生提示
new Vue({
el:".root",
data:{
message:'Hello! Vue'
}
})
</script>
1.4.3 v-model 收集表單案例
1.v-model的三個(gè)修飾符:
- v-model.trim: 去掉前后空格
- v-model.number:將收到的數(shù)據(jù)轉(zhuǎn)換為number類型
- v-model.lazy:表示當(dāng)失去焦點(diǎn)的時(shí)候再接收數(shù)據(jù)
2.v-model收集的就是value的值
- 當(dāng)input類型為radio,需要我們?nèi)ナ謩?dòng)配置一個(gè)value值
- 當(dāng)input類型為checkbox,它返回的布爾值,根據(jù)情況進(jìn)行是否配置value值
- 記住如果收集的是多個(gè),屬性值要是一個(gè)空的數(shù)組
<div id="root">
<form @submit.prevent="demo"> <!-- 當(dāng)點(diǎn)擊按鈕時(shí),會(huì)有默認(rèn)行為提交信息,刷新頁(yè)面-->
<!-- v-model.trim表示去掉前后空格 -->
賬號(hào):<input type="text" v-model.trim="userinfo.account"><br><br>
密碼:<input type="password" v-model="userinfo.password"><br><br>
<!-- input類型的number是限制用戶的輸入,而v-model.number是將收到的數(shù)據(jù)轉(zhuǎn)換為number類型,二者配合使用 -->
年齡:<input type="number" v-model.number="userinfo.age"><br><br>
性別:
<!-- 對(duì)于單選項(xiàng),我們通過(guò)取相同的名字來(lái)表示是一組的 -->
男<input type="radio" v-model="userinfo.sex" name="sex" value="男">
女<input type="radio" v-model="userinfo.sex" name="sex" value="女"><br><br>
愛(ài)好:
<input type="checkbox" v-model="userinfo.hobby" value="打籃球">打籃球
<input type="checkbox" v-model="userinfo.hobby" value="敲代碼">敲代碼
<input type="checkbox" v-model="userinfo.hobby" value="干飯">干飯
<br><br>
所屬校區(qū):
<select v-model="userinfo.address">
<option value="">請(qǐng)選擇地區(qū)</option>
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="廣州">廣州</option>
<option value="深圳">深圳</option>
</select><br><br>
<!-- v-model.lazy:表示當(dāng)失去焦點(diǎn)的時(shí)候再接收數(shù)據(jù) -->
其他信息:<textarea cols="20" rows="3" v-model.lazy="userinfo.other"></textarea>
<br><br>
<input type="checkbox" v-model="userinfo.agree">同意并接受
<a href="#" style="text-decoration: none;">《用戶協(xié)議》</a>
<br><br>
<button>提交</button>
</form>
</div>
<script>
Vue.config.productionTip = false
let vm = new Vue({
el: '#root',
data: {
userinfo:{
account:"",
password:"",
age:"",
sex:"",
hobby:[],
address:"",
other:"",
agree:""
},
},
methods: {
demo(){
console.log(JSON.stringify(this.userinfo));
}
},
})
</script>
1.5 理解MVVM

M
模型(Model) :data中的數(shù)據(jù)
V
視圖(View) :模板代碼(不是靜態(tài)頁(yè)面)
VM
viewModel: 視圖模型(Vue的實(shí)例)
對(duì)MVVM的理解:
MVVM 本質(zhì)上即模型-視圖-視圖模型。模型model指的是后端傳遞的數(shù)據(jù),視圖view指的是所看到的頁(yè)面。視圖模型viewModel是 mvvm 模式的核心,它是連接 view 和 model 的橋梁。它有兩個(gè)方向:
將模型轉(zhuǎn)化成視圖,即將后端傳遞的數(shù)據(jù)轉(zhuǎn)化成所看到的頁(yè)面。實(shí)現(xiàn)的方式是:數(shù)據(jù)綁定
將視圖轉(zhuǎn)化成模型,即將所看到的頁(yè)面轉(zhuǎn)化成后端的數(shù)據(jù)。實(shí)現(xiàn)的方式是:DOM 事件監(jiān)聽(tīng)
這兩個(gè)方向都實(shí)現(xiàn)的,我們稱之為數(shù)據(jù)的雙向綁定
1.6 Object.defineProperty(重要)
Object.defineProperty
- 第一個(gè)參數(shù):指定的對(duì)象
- 第二個(gè)參數(shù):要添加的屬性名
- 第三個(gè)參數(shù):配置項(xiàng)
<script>
let number = 20
Vue.config.productionTip = false //阻止默認(rèn)提示
var person = {
name : "jack",
address : "hgs"
}
Object.defineProperty(person,"age",{
// value: 18 ,
// enumerable:true, 控制屬性是否能夠進(jìn)行枚舉,默認(rèn)值false
// writable:true, 控制屬性是否能夠被修改,默認(rèn)值false
// configurable:true 控制屬性是否能夠被刪除,默認(rèn)值fasle
// 上面屬于基本配置,下面get和set很重要
//當(dāng)有人讀取person的age屬性時(shí)get函數(shù)(getter)就會(huì)被調(diào)用,返回的值就是age的值
get(){
console.log("讀取成功!");
return number
},
//當(dāng)有人修改Person的age屬性時(shí)set函數(shù)(setter)就會(huì)被調(diào)用,修改后的值就會(huì)被獲取到value
set(value){
console.log("修改的值: "+value);
number = value
}
})
1.7 數(shù)據(jù)代理(重要)
自我對(duì)于數(shù)據(jù)代理的理解:
- 當(dāng)創(chuàng)建vm實(shí)例對(duì)象后,它會(huì)在里面添加很多屬性,它會(huì)將
data的數(shù)據(jù)傳入到vm下的_data中去,并且把_data的數(shù)據(jù)利用Object.defineProperty也就是數(shù)據(jù)代理到vm中去通過(guò)getter和setter去讀/修改,這樣做的目的是方便寫代碼,直接{{name}},不用{{_data.name}}. - vue中的數(shù)據(jù)代理通過(guò)vm對(duì)象去代理data對(duì)象的屬性的操作給每一個(gè)添加到vm上的屬性,配置一個(gè)getter和setter通過(guò)getter和setter去操作data里的屬性
<div id="root">
<h1>Hello!{{_data.name}}</h1>
<h1>Hello!{{_data.address}}</h1>
<h1>Hello!{{name}}</h1>
<h1>Hello!{{address}}</h1>
</div>
<script>
Vue.config.productionTip = false //阻止默認(rèn)的提示
var vm = new Vue({
el: '#root',
data: {
name:"Jack",
address:"China"
}
})
</script>
總結(jié)
以上就是今天要講的內(nèi)容,本文僅僅簡(jiǎn)單介紹了Vue的一些基本知識(shí),希望對(duì)大家有幫助!
相關(guān)文章
vue elementUI實(shí)現(xiàn)拖拽流程圖效果
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)vue elementUI實(shí)現(xiàn)拖拽流程圖效果,不引入插件,純手寫實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01
vuejs 切換導(dǎo)航條高亮(路由菜單高亮)的方法示例
這篇文章主要介紹了vuejs 切換導(dǎo)航條高亮路由高亮的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
vue中{{}},v-text和v-html區(qū)別與應(yīng)用詳解
這篇文章主要介紹了vue中{{}},v-text和v-html區(qū)別與應(yīng)用詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
vue+element開發(fā)使用el-select不能回顯的處理方案
這篇文章主要介紹了vue+element開發(fā)使用el-select不能回顯的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
vue中實(shí)現(xiàn)子組件相互切換且數(shù)據(jù)不丟失的策略詳解
項(xiàng)目為數(shù)據(jù)報(bào)表,但是一個(gè)父頁(yè)面中有很多的子頁(yè)面,而且子頁(yè)面中不是相互關(guān)聯(lián),但是數(shù)據(jù)又有聯(lián)系,所以本文給大家介紹了vue中如何實(shí)現(xiàn)子組件相互切換,而且數(shù)據(jù)不會(huì)丟失,并有詳細(xì)的代碼供大家參考,需要的朋友可以參考下2024-03-03
vue項(xiàng)目依賴檢查depcheck問(wèn)題
這篇文章主要介紹了vue項(xiàng)目依賴檢查depcheck問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Vue后臺(tái)實(shí)現(xiàn)點(diǎn)擊圖片放大功能的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Vue實(shí)現(xiàn)點(diǎn)擊圖片放大功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2022-12-12
vue實(shí)現(xiàn)定時(shí)刷新數(shù)據(jù),每隔5分鐘執(zhí)行一次
這篇文章主要介紹了vue實(shí)現(xiàn)定時(shí)刷新數(shù)據(jù),每隔5分鐘執(zhí)行一次問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
vue鼠標(biāo)懸停事件監(jiān)聽(tīng)實(shí)現(xiàn)方法
頁(yè)面在鼠標(biāo)懸停(不動(dòng))n秒之后,頁(yè)面進(jìn)行相應(yīng)的事件,下面這篇文章主要給大家介紹了關(guān)于vue鼠標(biāo)懸停事件監(jiān)聽(tīng)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09

