第一步:下載html
官網地址:前端
第二步:放到項目的文件目錄下vue
通常新建一個js文件夾,放到js文件夾下python
第三步:在文檔中導入json
<script src="js/vue.js"></script>
第四步:使用vue數組
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/vue.js"></script> <!--導入js文件--> </head> <body> <div id="one"> <h1>{{message}}</h1> </div> <script> let vm=new Vue({ //實例化vue對象 el:'#one', //綁定控制區域 data:{ //數據屬性 message:'hello' } }); </script> </body> </html>
MVVM 是Model-View-ViewModel 的縮寫,它是一種基於前端開發的架構模式。架構
Model
指代的就是vue對象的data屬性裏面的數據。這裏的數據要顯示到頁面中。app
View
指代的就是vue中數據要顯示的HTML頁面,在vue中,也稱之爲「視圖模板」 。dom
ViewModel
ide
一、做爲標籤的內容顯示,使用{{ value }}的形式,支持使用js代碼
<h1>{{str1.split("").reverse().join("")}}</h1> <!-- 3.2 支持js的運算符--> <h1>{{num1+3}}</h1> <!-- 3.3 js還有一種運算符,三元運算符,相似於python裏面的三元表達式 三元運算符的語法: 判斷條件 ? 條件爲true : 條件爲false的結果 python 三元表達式[三目運算符]的語法: a if 條件 else b --> <h1>num1和num2之間進行比較,最大值:{{ num2>num1?num2:num1 }}</h1>
二、做爲表單元素的值顯示,使用 v-model = "name",並且數據是雙向綁定的,表單的值發生變化,data跟着變;data發生變化,表單的顯示也跟着變
三、輸出htnl代碼,使用v-html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/vue.js"></script> </head> <body> <div class="app"> <h1>{{title}}</h1> <h3>{{url1}}</h3> {{img}}<br> <span v-html="img"></span> </div> <script> let vm = new Vue({ el:".app", data:{ title:"個人vue", url1:"個人收穫地址", img:'<img src="images/shendan.png">', } }) </script> </body> </html>
指令(directives)是帶有"v-"前綴的特殊屬性,每個指令在vue中都用固定的做用,經常使用的有v-if,v-for,v-model等等。
指令會在vm對象中的data屬性的數據發生變化時,同步改變元素中其控制的內容或屬性。
vue指令的兩種寫法:
vue1.x寫法 vue2.x的寫法
v-html ----> {{ }}
v-bind:屬性名 ----> :屬性
v-on:事件名 ----> @事件名
一、操做屬性
格式: <標籤名 :標籤屬性="data"></標籤名>
<p :title="str1">{{ str1 }}</p> <!-- 也能夠使用v-html顯示雙標籤的內容,{{ }} 是簡寫 --> <a :href="url2">淘寶</a> <a v-bind:href="url1">百度</a> <!-- v-bind是vue1.x版本的寫法 -->
二、綁定事件
<button v-on:click="num++">按鈕</button> <!-- v-on 是vue1.x版本的寫法 --> <button @click="num+=5">按鈕2</button>
三、操做樣式
3.1 控制標籤的style樣式
格式1:值是json對象,對象寫在元素的:style屬性中 標籤元素: <div :style="{color: activeColor, fontSize: fontSize + 'px' }"></div> data數據以下: data: { activeColor: 'red', fontSize: 30 } 格式2:值是對象變量名,對象在data中進行聲明 標籤元素: <div v-bind:style="styleObject"></div> data數據以下: data: { styleObject: { color: 'red', fontSize: '13px' } } 格式3:值是數組 標籤元素: <div v-bind:style="[style1, style2]"></div> data數據以下: data: { style1:{ color:"red" }, style2:{ background:"yellow", fontSize: "21px" } }
3.2 控制class類名
格式:<h1 :class="值">元素</h1>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/vue.js"></script> <style> .box1{ color: red; border: 1px solid #000; } .box2{ background-color: orange; font-size: 32px; } </style> </head> <body> <div id="box"> <!--- 添加class類名,值是一個對象 { class類1:布爾值變量1, class類2:布爾值變量2, } --> <p :class="{box1:myclass1}">一個段落</p> <p @click="myclass3=!myclass3" :class="{box1:myclass2,box2:myclass3}">一個段落</p> </div> <script> let vm1=new Vue({ el:"#box", data:{ myclass1:false, // 布爾值變量若是是false,則不會添加對象的屬性名做爲樣式 myclass2:true, // 布爾值變量若是是true,則不會添加對象的屬性名做爲樣式 myclass3:false, }, }) </script> <!-- 上面的代碼能夠:class的值保存到data裏面的一個變量,而後使用該變量做爲:class的值 這種最經常使用--> <style> .box4{ background-color: red; } .box5{ color: green; } </style> <div id="app"> <button @click="mycls.box4=!mycls.box4">改變背景</button> <button @click="mycls.box5=!mycls.box5">改變字體顏色</button> <p :class="mycls">第二個段落</p> </div> <script> let vm2 = new Vue({ el:"#app", data:{ mycls:{ box4:false, box5:true }, } }) </script> <!-- 批量給元素增長多個class樣式類 --> <style> .box6{ background-color: red; } .box7{ color: green; } .box8{ border: 1px solid yellow; } </style> <div id="app2"> <p :class="[mycls1,mycls2]">第三個段落</p> </div> <script> let vm3 = new Vue({ el:"#app2", data:{ mycls1:{ box6:true, box7:true, }, mycls2:{ box8:true, } } }) </script> </body> </html>
四、條件渲染指令(v-if, v-show)
v-if,v-show後跟的是布爾值,true則顯示,false則隱藏
標籤元素: <h1 v-if="num==1">num的值爲1</h1> <h1 v-else-if="num==2">num的值爲2</h1> <h1 v-else>num的值是{{num}}</h1> data數據: data:{ num:2 }
標籤元素: <h1 v-show="ok">Hello!</h1> data數據: data:{ ok:false // true則是顯示,false是隱藏 }
v-show 和v-if的區別:
#v-show後面不能有v-else
#v-show隱藏元素時,使用的是display:none來隱藏的,而v-if是直接從HTML文檔中移除元素
五、列表渲染指令
經過v-for指令能夠將一組數據渲染到頁面中,數據能夠是數組或者對象
數據是數組: <ul> <!--i是列表的每個元素--> <li v-for="i in list">{{i}}</li> </ul> <ul> <!--i是列表的每個元素,j是每一個元素的下標--> <li v-for="(i, j) in list">{{ j+1}}、{{i}}</li> </ul> 數據是對象: <ul> <!--i是每個value值--> <li v-for="i in obj1">{{i}}</li> </ul> <ul> <!--i是每個value值,j是每個鍵名--> <li v-for="(i, j) in obj1">{{j}}:{{i}}</li> </ul>
一、過濾器
過濾器能夠用來過濾數據或格式化文本
過濾器定義方式有兩種:
var vm = new Vue({
el:"#app",
data:{},
filters:{
RMB2:function(value){
if(value==''){
return;
}else{
return '¥ '+value;
}
}
}
});
Vue.filter("RMB1", function(v){
//就是來格式化(處理)v這個數據的
if(v==0){
return v
}
return v+"元"
})
二、阻止事件冒泡和頁面刷新
事件冒泡:在js的事件操做中,子元素的事件觸發之後,會默認把事件傳播給其父級元素,而後一層層往外傳播,這種現象就是事件冒泡,添加.stop能夠組織事件往外傳播
阻止頁面刷新:
超連接\表單中的提交,但願阻止頁面刷新,能夠使用 @事件.prevent=""
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/vue.js"></script> <style> .box1{ width: 200px; height:200px; background: #3c3c3c; } .box2{ width:100px; height:100px; background:deeppink; } </style> <script> window.onload=function(){ var vm =new Vue({ el:'#app', data:{}, methods:{ alert:function(v){ alert(v) } } }) } </script> </head> <body> <div id="app"> <div class="box1" @click="alert('box1')"> <div class="box2" @click.stop="alert('box2')"> 啦啦啦德瑪西亞 </div> </div> <form action="#"> <input type="text"> <input type="submit"> <input type="submit" value="提交2" @click.prevent=""> </form> </div> </body> </html>
三、計算和監聽屬性
計算屬性
將調整data數據的代碼放在計算屬性(computed)中,就是對數據調整的封裝,便於閱讀
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/vue.min.js"></script> <script> window.onload = function(){ var vm = new Vue({ el:"#app", data:{ str1: "abcdefgh" }, computed:{ //計算屬性:裏面的函數都必須有返回值 strRevs: function(){ var ret = this.str1.split("").reverse().join(""); return ret } } }); } </script> </head> <body> <div id="app"> <p>{{ str1 }}</p> <p>{{ strRevs }}</p> </div> </body> </html>
監聽屬性
能夠監聽一個數據,從而作出相應的自定義操做。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/vue.js"></script> </head> <body> <div id="one"> <button @click="num-=1">-</button><span>{{num}}</span><button @click="num=num+1">+</button> </div> <script> let vm =new Vue({ el:'#one', data:{ num:2 }, watch:{ num:function(newval,oldval){ console.log(newval,oldval) if (newval == 0){ alert('數值已經減到最小了') }else if(newval<0){ alert('數據有誤') } } } }) </script> </body> </html>
四、vue對象的生命週期
每一個vue對象在建立時都要通過一系列的初始化過程,在這個過程當中vue.js會自動運行一些叫作生命週期的鉤子函數,咱們能夠使用這些函數,在對象建立的不一樣階段加上咱們須要的代碼,實現特定的功能
部分鉤子函數及做用:
beforeCreate:function(){} //實例剛被建立,data屬性還未初始化
created:function(){} //初始化data,但未初始化dom
beforeMount(){} //初始化dom
mounted(){} //data顯示到頁面
beforeUpdate(){} // vm對象還未把更新的數據顯示到頁面
update(){} //vm對象把更新的數據顯示到了頁面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/vue.js"></script> </head> <body> <div id="app"> <p>{{num}}</p> <button @click="num++">按鈕</button> </div> <script> let vm = new Vue({ el:'#app', data:{ num:0 }, beforeCreate:function () { //還沒有初始化 console.log('beforeCreate:',this) console.log('num:',this.num) }, created:function () { console.log('Created:',this) console.log('num:',this.num) //初始化了data console.log('el:',this.$el) }, beforeMount:function () { console.log('beforeMount:',this) console.log('num:',this.num) console.log('el:',this.$el.innerHTML) //初始化$el }, mounted:function () { console.log('mounted:',this) console.log('num:',this.num) console.log('mounted_el:',this.$el.innerHTML) //data 顯示到頁面 }, beforeUpdate:function () { console.log('beforeUpdate_el:',this.$el.innerHTML) //vm對象還未把更新的數據顯示到頁面 }, updated:function(){ console.log('updated_el:',this.$el.innerHTML) //vm對象把更新的數據顯示到了頁面 } }) </script> </body> </html>