vue快速入門基礎知識教程
VUE是一套前端框架,免除瞭原生JavaScript中的DOM操作,簡化書寫。VUE基於MVVM(Model-View_ViewModel)思想,實現數據雙向綁定。
Vue的核心庫隻關註圖層.響應式數據綁定和組件化開發是其兩大特點.
響應式數據綁定指的是vue.js會自動對頁面中的某些數據的變化做出響應.(v-model指令可以實現數據的雙向綁定)
組件化開發指的是vue.js通過組件,把一個單頁應用中的各種模塊拆分到一個個單獨的組件(component)中,我們隻要先在父級組件中寫好各種組件標簽,並且在組件標簽中寫好要傳入組件的參數,然後在寫好各種組件的實現,整個應用就可以完成瞭.
1 初識Vue
想讓Vue工作,就必須創建一個Vue實例,且要傳入一個配置對象
demo容器裡的代碼依然符合html規范,隻不過混入瞭一些特殊的Vue語法
demo容器裡的代碼被稱為【Vue模板】
Vue實例和容器是一一對應的
真實開發中隻有一個Vue實例,並且會配合著組件一起使用
{{xxx}}是Vue的語法:插值表達式,{{xxx}}可以讀取到data中的所有屬性
一旦data中的數據發生改變,那麼頁面中用到該數據的地方也會自動更新(Vue實現的響應式)
初始示例代碼
<!-- 準備好一個容器 --> <div id="demo"> <h1>Hello,{{name.toUpperCase()}},{{address}}</h1> </div> <script type="text/javascript" > Vue.config.productionTip = false //阻止 vue 在啟動時生成生產提示。 //創建Vue實例 new Vue({ el:'#demo', //el用於指定當前Vue實例為哪個容器服務,值通常為css選擇器字符串。 data:{ //data中用於存儲數據,數據供el所指定的容器去使用,值我們暫時先寫成一個對象。 name:'hello,world', address:'北京' } }); </script>
2 模板語法
Vue模板語法有2大類:
插值語法:
功能:用於解析標簽體內容
寫法:{{xxx}},xxx是js表達式,且可以直接讀取到data中的所有屬性
指令語法:
功能:用於解析標簽(包括:標簽屬性、標簽體內容、綁定事件…)
舉例:v-bind:href=“xxx” 或 簡寫為 :href=“xxx”,xxx同樣要寫js表達式,且可以直接讀取到data中的所有屬性
<div id="root"> <h1>插值語法</h1> <h3>你好,{{name}}</h3> <hr/> <h1>指令語法</h1> <!-- 這裡是展示被Vue指令綁定的屬性,引號內寫的是js表達式 --> <a :href="school.url.toUpperCase()" rel="external nofollow" x="hello">點我去{{school.name}}學習1</a> <a :href="school.url" rel="external nofollow" x="hello">點我去{{school.name}}學習2</a> </div> <script> new Vue({ el:'#root', data:{ name:'jack', school:{ name:'百度', url:'http://www.baidu.com', } } }) </script>
3 數據綁定
Vue中有2種數據綁定的方式:
單向綁定(v-bind):數據隻能從data流向頁面
雙向綁定(v-model):數據不僅能從data流向頁面,還可以從頁面流向data
tips:
1.雙向綁定一般都應用在表單類元素上(如:input、select等)
2.v-model:value 可以簡寫為 v-model,因為v-model默認收集的就是value值
<div id="root"> <!-- 普通寫法 單向數據綁定 --> 單向數據綁定:<input type="text" v-bind:value="name"><br/> 雙向數據綁定:<input type="text" v-model:value="name"><br/> <!-- 簡寫 v-model:value 可以簡寫為 v-model,因為v-model默認收集的就是value值--> 單向數據綁定:<input type="text" :value="name"><br/> 雙向數據綁定:<input type="text" v-model="name"><br/> </div> <script> new Vue({ el:'#root', data:{ name:'jack', } }) </script>
4 事件處理
事件的基本使用:
- 使用v-on:xxx 或 @xxx 綁定事件,其中xxx是事件名
- 事件的回調需要配置在methods對象中,最終會在vm上
- methods中配置的函數,都是被Vue所管理的函數,this的指向是vm 或 組件實例對象
<!-- 準備好一個容器--> <div id="root"> <h2>歡迎來到{{name}}學習</h2> <!-- <button v-on:click="showInfo">點我提示信息</button> --> <button @click="showInfo1">點我提示信息1(不傳參)</button> <!-- 主動傳事件本身 --> <button @click="showInfo2($event,66)">點我提示信息2(傳參)</button> </div> <script> const vm = new Vue({ el:'#root', data:{ name:'vue', }, methods:{ // 如果vue模板沒有寫event,會自動傳 event 給函數 showInfo1(event){ // console.log(event.target.innerText) // console.log(this) //此處的this是vm alert('同學你好!') }, showInfo2(event,number){ console.log(event,number) // console.log(event.target.innerText) // console.log(this) //此處的this是vm alert('同學你好!!') } } }); </script>
Vue中的事件修飾符
- prevent:阻止默認事件(常用)
- stop:阻止事件冒泡(常用)
- once:事件隻觸發一次(常用)
<!-- 準備好一個容器--> <div id="root"> <h2>歡迎來到{{name}}學習</h2> <!-- 阻止默認事件(常用) --> <a href="http://www.baidu.com" rel="external nofollow" @click.prevent="showInfo">點我提示信息</a> <!-- 阻止事件冒泡(常用) --> <div class="demo1" @click="showInfo"> <button @click.stop="showInfo">點我提示信息</button> <!-- 修飾符可以連續寫 --> <!-- <a href="http://www.atguigu.com" rel="external nofollow" @click.prevent.stop="showInfo">點我提示信息</a> --> </div> <!-- 事件隻觸發一次(常用) --> <button @click.once="showInfo">點我提示信息</button> </div>
5 鍵盤事件
鍵盤事件語法糖:@keydown,@keyup
Vue中常用的按鍵別名:
- 回車 => enter
- 刪除 => delete
- 退出 => esc
- 空格 => space
- 換行 => tab (特殊,必須配合keydown去使用)
<!-- 準備好一個容器--> <div id="root"> <h2>歡迎來到{{name}}學習</h2> <input type="text" placeholder="按下回車提示輸入" @keydown.enter="showInfo"> </div> <script> new Vue({ el:'#root', data:{ name:'浙江理工大學' }, methods: { showInfo(e){ // console.log(e.key,e.keyCode) console.log(e.target.value) } }, }) </script>
6 條件渲染
v-if
寫法:
(1).v-if=“表達式”
(2).v-else-if=“表達式”
(3).v-else=“表達式”
適用於:切換頻率較低的場景
特點:不展示的DOM元素直接被移除
註意:v-if可以和:v-else-if、v-else一起使用,但要求結構不能被“打斷”
<!-- 準備好一個容器--> <div id="root"> <!-- 使用v-if做條件渲染 --> <h2 v-if="false">歡迎來到{{name}}</h2> <h2 v-if="1 === 1">歡迎來到{{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的配合使用 --> <!-- 就不需要寫好多個判斷,寫一個就行 --> <!-- 這裡的思想就像事件代理的使用 --> <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=“表達式”
適用於:切換頻率較高的場景
特點:不展示的DOM元素未被移除,僅僅是使用樣式隱藏掉(display:none)
備註:使用v-if的時,元素可能無法獲取到,而使用v-show一定可以獲取到
v-if 是實打實地改變dom元素,v-show 是隱藏或顯示dom元素
<!-- 準備好一個容器--> <div id="root"> <!-- 使用v-show做條件渲染 --> <h2 v-show="false">歡迎來到{{name}}</h2> <h2 v-show="1 === 1">歡迎來到{{name}}</h2> </div>
7 列表渲染
v-for指令
- 用於展示列表數據
- 語法:v-for=“(item, index) in xxx” :key=“yyy”
- 可遍歷:數組、對象、字符串(用的很少)、指定次數(用的很少)
<div id="root"> <!-- 遍歷數組 --> <h2>人員列表(遍歷數組)</h2> <ul> <li v-for="(p,index) of persons" :key="index"> {{p.name}}-{{p.age}} </li> </ul> <!-- 遍歷對象 --> <h2>汽車信息(遍歷對象)</h2> <ul> <li v-for="(value,k) of car" :key="k"> {{k}}-{{value}} </li> </ul> <!-- 遍歷字符串 --> <h2>測試遍歷字符串(用得少)</h2> <ul> <li v-for="(char,index) of str" :key="index"> {{char}}-{{index}} </li> </ul> <!-- 遍歷指定次數 --> <h2>測試遍歷指定次數(用得少)</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萬', color: '黑色' }, str: 'hello' } }) </script>
8 生命周期
Vue 實例有一個完整的⽣命周期,也就是從new Vue()、初始化事件(.once事件)和生命周期、編譯模版、掛載Dom -> 渲染、更新 -> 渲染、卸載 等一系列過程,稱這是Vue的生命周期。
beforeCreate(創建前):數據監測(getter和setter)和初始化事件還未開始,此時 data 的響應式追蹤、event/watcher 都還沒有被設置,也就是說不能訪問到data、computed、watch、methods上的方法和數據。
created(創建後):實例創建完成,實例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但是此時渲染得節點還未掛載到 DOM,所以不能訪問到 $el屬性。
beforeMount(掛載前):在掛載開始之前被調用,相關的render函數首次被調用。此階段Vue開始解析模板,生成虛擬DOM存在內存中,還沒有把虛擬DOM轉換成真實DOM,插入頁面中。所以網頁不能顯示解析好的內容。
mounted(掛載後):在el被新創建的 vm.$el(就是真實DOM的拷貝)替換,並掛載到實例上去之後調用(將內存中的虛擬DOM轉為真實DOM,真實DOM插入頁面)。此時頁面中呈現的是經過Vue編譯的DOM,這時在這個鉤子函數中對DOM的操作可以有效,但要盡量避免。一般在這個階段進行:開啟定時器,發送網絡請求,訂閱消息,綁定自定義事件等等
beforeUpdate(更新前):響應式數據更新時調用,此時雖然響應式數據更新瞭,但是對應的真實 DOM 還沒有被渲染(數據是新的,但頁面是舊的,頁面和數據沒保持同步呢)。
updated(更新後) :在由於數據更改導致的虛擬DOM重新渲染和打補丁之後調用。此時 DOM 已經根據響應式數據的變化更新瞭。調用時,組件 DOM已經更新,所以可以執行依賴於DOM的操作。然而在大多數情況下,應該避免在此期間更改狀態,因為這可能會導致更新無限循環。該鉤子在服務器端渲染期間不被調用。
beforeDestroy(銷毀前):實例銷毀之前調用。這一步,實例仍然完全可用,this 仍能獲取到實例。在這個階段一般進行關閉定時器,取消訂閱消息,解綁自定義事件。
destroyed(銷毀後):實例銷毀後調用,調用後,Vue 實例指示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子實例也會被銷毀。該鉤子在服務端渲染期間不被調用。
9 總結
到此這篇關於vue快速入門基礎知識教程的文章就介紹到這瞭,更多相關vue快速入門教程內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!