Vue的基本知識你都了解嗎
1. Vue的基本知識
1.1 Vue的使用
- 可以導(dǎo)入Vue文件或者是通過CDN引入
- 想要讓Vue工作就必須要創(chuàng)建一個Vue的實例對象,并且配置對象
- 在真實的開發(fā)中只有一個Vue的實例,并且配合組件一起使用
1.2 插值語法
<div> <h1> Hello!{{name}} {{Date.now()}} {{address}} </h1> </div> <script> Vue.config.productionTip = false //阻止vue在生成時自動產(chǎn)生提示 //創(chuàng)建Vue實例 new Vue({ el:'#root', //el用于指定當(dāng)前Vue實例為哪個容器服務(wù),值通常為css選擇器字符串。 data:{ //data中用于存儲數(shù)據(jù),數(shù)據(jù)供el所指定的容器去使用,值我們暫時先寫成一個對象。 name:'Tree', address:'China' } }) </script>
注意點:
1.{ { xxx } } 這里的xxx要寫的是js表達(dá)式,并且它會自動讀取到data中所有的屬性
2.一旦data中的數(shù)據(jù)發(fā)生改變,那么頁面用帶該數(shù)據(jù)的地方也會自動更新
3.插值語法的功能:用于去解析標(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)生一個值或者返回一個值 (1) a = 1 (2) a+b (3) Date.now() 函數(shù) (4) x = Y ? 1 : 2 2. 什么是js代碼?(語句) (1) if(){} (2) for(){} js表達(dá)式就是一種特殊的js代碼
1.3 v-bind(單向綁定)
? 指令語法有很多,下面例子只是其中一個 v-bind: ===> 可以簡寫為 :
? 加入該指令后 " " 里的內(nèi)容就會變成js表達(dá)式,而不是字符串(這個知識點很重要后面使用的地方會很多)
? 該方法是解析標(biāo)簽得屬性,指令的功能很強(qiáng)大可以解析標(biāo)簽(例如:解析標(biāo)簽體,標(biāo)簽屬性,綁定事件)
<div class="wrapper"> <h1>你好??!{{name}}</h1> <hr> <a :href="school.url">點擊進(jìn)入{{school.name}}</a> <a v-bind:href="school.url">點擊進(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(單項綁定):數(shù)據(jù)只能從data流向頁面
- v-model(雙向綁定):不僅數(shù)據(jù)從data流向頁面,而且可以從頁面流向data
- 雙向綁定一般用在表單類元素上面(input,select,含有value屬性值)
- 如果遇到像checkbox這種類型的沒有value值時,v-model/ v-bind 傳boolearn值可以去控制該類型的狀態(tài)
<div class="wrapper"> <!-- 普通寫法 --> <!-- 單項數(shù)據(jù)綁定: <input type="text" v-bind:value="name"><br> 雙向數(shù)據(jù)綁定: <input type="text" v-model:value="name"> --> <!-- 簡便寫法 --> 單項數(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 簡單小例子
<div class="root"> <input type="text" v-model="message"> <p>{{message}}</p> </div> <script> Vue.config.productionTip = false //阻止vue在生成時自動產(chǎn)生提示 new Vue({ el:".root", data:{ message:'Hello! Vue' } }) </script>
1.4.3 v-model 收集表單案例
1.v-model的三個修飾符:
- v-model.trim: 去掉前后空格
- v-model.number:將收到的數(shù)據(jù)轉(zhuǎn)換為number類型
- v-model.lazy:表示當(dāng)失去焦點的時候再接收數(shù)據(jù)
2.v-model收集的就是value的值
- 當(dāng)input類型為radio,需要我們?nèi)ナ謩优渲靡粋€value值
- 當(dāng)input類型為checkbox,它返回的布爾值,根據(jù)情況進(jìn)行是否配置value值
- 記住如果收集的是多個,屬性值要是一個空的數(shù)組
<div id="root"> <form @submit.prevent="demo"> <!-- 當(dāng)點擊按鈕時,會有默認(rèn)行為提交信息,刷新頁面--> <!-- v-model.trim表示去掉前后空格 --> 賬號:<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> 性別: <!-- 對于單選項,我們通過取相同的名字來表示是一組的 --> 男<input type="radio" v-model="userinfo.sex" name="sex" value="男"> 女<input type="radio" v-model="userinfo.sex" name="sex" value="女"><br><br> 愛好: <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ū)</option> <option value="北京">北京</option> <option value="上海">上海</option> <option value="廣州">廣州</option> <option value="深圳">深圳</option> </select><br><br> <!-- v-model.lazy:表示當(dāng)失去焦點的時候再接收數(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)頁面)
VM
viewModel: 視圖模型(Vue的實例)
對MVVM的理解:
MVVM 本質(zhì)上即模型-視圖-視圖模型。模型model指的是后端傳遞的數(shù)據(jù),視圖view指的是所看到的頁面。視圖模型viewModel是 mvvm 模式的核心,它是連接 view 和 model 的橋梁。它有兩個方向:
將模型轉(zhuǎn)化成視圖,即將后端傳遞的數(shù)據(jù)轉(zhuǎn)化成所看到的頁面。實現(xiàn)的方式是:數(shù)據(jù)綁定
將視圖轉(zhuǎn)化成模型,即將所看到的頁面轉(zhuǎn)化成后端的數(shù)據(jù)。實現(xiàn)的方式是:DOM 事件監(jiān)聽
這兩個方向都實現(xiàn)的,我們稱之為數(shù)據(jù)的雙向綁定
1.6 Object.defineProperty(重要)
Object.defineProperty - 第一個參數(shù):指定的對象 - 第二個參數(shù):要添加的屬性名 - 第三個參數(shù):配置項
<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屬性時get函數(shù)(getter)就會被調(diào)用,返回的值就是age的值 get(){ console.log("讀取成功!"); return number }, //當(dāng)有人修改Person的age屬性時set函數(shù)(setter)就會被調(diào)用,修改后的值就會被獲取到value set(value){ console.log("修改的值: "+value); number = value } })
1.7 數(shù)據(jù)代理(重要)
自我對于數(shù)據(jù)代理的理解:
- 當(dāng)創(chuàng)建vm實例對象后,它會在里面添加很多屬性,它會將
data
的數(shù)據(jù)傳入到vm下的_data
中去,并且把_data
的數(shù)據(jù)利用Object.defineProperty
也就是數(shù)據(jù)代理到vm中去通過getter和setter去讀/修改,這樣做的目的是方便寫代碼,直接{{name
}},不用{{_data.name
}}. - vue中的數(shù)據(jù)代理通過vm對象去代理data對象的屬性的操作給每一個添加到vm上的屬性,配置一個getter和setter通過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)容,本文僅僅簡單介紹了Vue的一些基本知識,希望對大家有幫助!
相關(guān)文章
vue2.0結(jié)合DataTable插件實現(xiàn)表格動態(tài)刷新的方法詳解
這篇文章主要介紹了vue2.0結(jié)合DataTable插件實現(xiàn)表格動態(tài)刷新的方法,結(jié)合具體項目實例形式分析了vue2.0結(jié)合DataTable插件實現(xiàn)表格動態(tài)刷新過程中遇到的問題與相應(yīng)的解決方法,需要的朋友可以參考下2017-03-03