<div :class="{c1:true/false}"></div>html
語法:{ class類1:布爾值變量1, class類2:布爾值變量2, } 例子: <p :class="{box1:myclass1}">一個段落</p> // 布爾值變量若是是false,則不會添加對象的屬性名做爲樣式 // 布爾值變量若是是true,則不會添加對象的屬性名做爲樣式
<!DOCTYPE html> <html lang="zh-CN"> <head> <title>html</title> <style> .c1{ background-color: red; font-size: 18px; } .c2{ font-size: 36px; } </style> </head> <body> <div id="app"> <!-- 根據data中的num的值來肯定是否顯示c1樣式 --> <div :class="{c1:num==0}" class="c2">{{msg}}</div>
<!-- 根據vue傳過來的data中的status的值來肯定顯示c1樣式仍是c2樣式 --> <div :class="status?'c1':'c2'">{{ msg }}</div>
<!-- m1爲自定義對象 --> <div :class="[m1,]">{{ msg }}</div> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return{ msg:'hello', num:0, status:true, m1:{ c1:false, c2:true, } } } }) </script> </html>
// 1. 給元素綁定class類名 data:{ myObj:{ complete:true, uncomplete:false, } } // html元素: <div class="box" :class="myObj">2222</div> // 最終瀏覽器效果: <div class="box complete">2222</div>
操做樣式語法: vue
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>html</title> </head> <body> <div id="app"> <!-- style操做方式1 --> <div :style="{color:fontColor,backgroundColor:bgc}"> style操做方式1 </div> <!-- style操做方式2 --> <div :style="vuestyle"> style操做方式2 </div> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el: '#app', data() { return { fontColor: 'red', bgc: 'green', vuestyle: { 'color': 'red', fontSize: '80px' }, } } }) </script> </html>
實現思路:當用戶點擊標題欄的按鈕[span]時,顯示對應索引下標的內容塊[.list]python
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #card{ width: 500px; height: 350px; } .title{ height:50px; } .title span{ width: 100px; height: 50px; background-color:#ccc; display: inline-block; line-height: 50px; /* 設置行和當前元素的高度相等,就可讓文本內容上下居中 */ text-align:center; } .content .list{ width: 500px; height: 300px; background-color: yellow; display: none; } .content .active{ display: block; } .title .current{ background-color: yellow; } </style> <script src="vue.js"></script> </head> <body> <div id="card"> <div class="title"> <span @click="num=1" :class="{current:num===1}">國內新聞</span> <span @click="num=2" :class="{current:num===2}">國際新聞</span> <span @click="num=3" :class="{current:num===3}">銀河新聞</span> <!--<span>{{num}}</span>--> </div> <div class="content"> <div class="list" :class="{active:num===1}">國內新聞列表</div> <div class="list" :class="{active:num===2}">國際新聞列表</div> <div class="list" :class="{active:num===3}">銀河新聞列表</div> </div> </div> <script> // 思路: // 當用戶點擊標題欄的按鈕[span]時,顯示對應索引下標的內容塊[.list] // 代碼實現: var card = new Vue({ el:"#card", data:{ num:1, }, }); </script> </body> </html>
v-for語法:ios
<tr v-for="(value,index) in vue中data的數據" :key="index">
<!DOCTYPE html> <html lang="zh-CN"> <head> <title>html</title> <meta charset="UTF-8"> </head> <body> <div id="app"> <table border="1"> <thead> <tr> <th>name</th> <th>price</th> </tr> </thead> <tbody> <tr v-for="(value,index) in goods" :key="index"> <td>{{ value.name }}</td> <td v-if="value.price>60" style="background-color: red">{{ value.price }}</td> <td v-else>{{ value.price }}</td> </tr> </tbody> </table> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el: '#app', data() { return { goods: [ {"name": "python入門", "price": 150}, {"name": "python進階", "price": 100}, {"name": "python高級", "price": 75}, {"name": "python研究", "price": 60}, {"name": "python放棄", "price": 110}, ] } } }) </script> </html>
<!DOCTYPE html> <html lang="zh-CN"> <head> <title>html</title> <meta charset="UTF-8"> </head> <body> <div id="app"> <p>{{ price }}</p> <p>{{ price.toFixed(2) }}</p> <!-- 保留兩位小數,四捨五入 --> <p>{{ price|yuan }}</p> <!-- 過濾器 --> <p>{{ price|global }}</p> <!-- 使用全局過濾器 --> <p>{{ price|global|yuan }}</p> <!-- 同時使用兩個過濾器 --> <p>{{ price2|yuan2(2) }}</p> <!-- 過濾器傳額外參數 --> </div> </body> <script src="vue.js"></script> <script> // 全局過濾器 Vue.filter('global',function (value) { return value.toFixed(3) + '圓' }); let vm = new Vue({ el:"#app", data(){ return{ price:100, price2:100.128, } }, filters:{ // vue中的過濾器 yuan(value){ return value + '元' }, yuan2(value,n){ return value.toFixed(n) + '元' } } }) </script> </html>
咱們以前學習過字符串反轉,若是直接把反轉的代碼寫在元素中,則會使得其餘同事在開發時時不易發現數據被調整了,因此vue提供了一個計算屬性(computed),可讓咱們把調整data數據的代碼存在在該屬性中ajax
<!DOCTYPE html> <html lang="zh-CN"> <head> <title>html</title> <meta charset="UTF-8"> </head> <body> <div id="app"> <p>{{ price }}</p> <p>{{ add }}</p> </div> </body> <script src="vue.js"></script> <script> var vm = new Vue({ el:'#app', data(){ return{ price1:100, price2:100.126, } }, // 計算屬性 computed:{ add(){ return this.price1+ this.price2 } } }) </script> </html>
偵聽屬性,能夠幫助咱們偵聽data某個數據的變化,從而作相應的自定義操做。axios
偵聽屬性是一個對象,它的鍵是要監聽的對象或者變量,值通常是函數,當偵聽的data數據發生變化時,會自定執行的對應函數,這個函數在被調用時,vue會傳入兩個形參,第一個是變化後的數據值,第二個是變化前的數據值。後端
<!DOCTYPE html> <html lang="zh-CN"> <head> <title>html</title> <meta charset="UTF-8"> </head> <body> <div id="app"> <p> {{ price1 }}</p> <input type="text" v-model = "price1"> <button @click="info.xx='ss'">GOGOGO</button> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:"#app", data(){ return{ price1:100, price2:100.126, info:{ xx:'oo' } } }, watch:{ // 監聽變量 price1(newv,oldv){ console.log(newv,oldv); if (newv == 888){ alert('恭喜你,中獎了!') } }, // 監聽對象 'info.xx':function (newv,oldv) { if(newv != 'oo'){ alert('oo滾出了房間!') } } } }) </script> </html>
<!DOCTYPE html> <html lang="zh-CN"> <head> <title>html</title> <meta charset="UTF-8"> </head> <body> <div id="app"> <input type="text" v-model="iptmsg"> <span style="color: red;font-size: 12px">{{msg}}</span> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return{ iptmsg:'', msg:'' } }, watch:{ // 監聽input框輸入的信息,判斷長度是否符合要求 iptmsg(newv,oldv){ if (newv.length>4 && newv.length<10){ this.msg='' } else{ this.msg='長度不對!' } } } }) </script> </html>
每一個Vue對象在建立時都要通過一系列的初始化過程。在這個過程當中Vue.js會自動運行一些叫作生命週期的的鉤子函數,咱們可使用這些函數,在對象建立的不一樣階段加上咱們須要的代碼,實現特定的功能。瀏覽器
<!DOCTYPE html> <html lang="zh-CN"> <head> <title>html</title> <meta charset="UTF-8"> </head> <body> <div id="app"> <p>{{ num }}</p> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return{ num:0, } }, // 觸發時機:1.建立vm對象以前 2.圈地以前 3.data數據放到vm對象以前 beforeCreate(){ console.log('----beforeCreate----'); console.log(this.$el); // undefined console.log(this.$data); //undefined }, // 重要!! created(){ console.log('----created----'); console.log(this.$el); // undefined console.log(this.num); // 0 data屬性的值0已經放到vm對象中 this.num = 20; }, beforeMount(){ console.log('----beforeMount----'); console.log(this.$el); // <div id="app">...</div> console.log(this.num); // 20 vm對象尚未將數據添加到咱們的視圖中 this.num = 30; }, // 重要!! mounted(){ console.log('----mounted----'); console.log(this.$el); // <div id="app">...</div> console.log(this.num); // 30 vm對象已經把更新後的data數據顯示到頁面中 } }) </script> </html>
1.在vue使用的過程當中,若是要初始化操做,把初始化操做的代碼放在 mounted 中執行。mounted階段就是在vm對象已經把data數據實現到頁面之後。通常頁面初始化使用。例如,用戶訪問頁面加載成功之後,就要執行的ajax請求。app
2.另外一個就是created,這個階段就是在 vue對象建立之後,把ajax請求後端數據的代碼放進 created函數
<div class="c2" @click.stop.prevent="f2"></div>
<!DOCTYPE html> <html lang="zh-CN"> <head> <title>html</title> <meta charset="UTF-8"> <style> .c1{ background-color: red; height: 200px; } .c2{ background-color: green; height: 100px; width: 100px; } </style> </head> <body> <div id="app"> <div class="c1" @click="f1"> <div class="c2" @click.stop.prevent="f2"></div> <!-- 阻止事件冒泡 --> </div> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { price1:100, } }, methods:{ f1(){ alert('111'); }, f2(){ alert('222'); } } }) </script> </html>
。。。
1.在A中的init方法調用一個函數
2.B繼承A
3.B能夠重寫A預留出來的鉤子方法run
4.當實例化B時,因爲B中沒有init,會執行其父類A中的init,而A中的init調用了run方法
若是B中重寫run方法 那麼執行B中的run方法
若是B中沒重寫run方法 那麼執行A中的run方法
都是自動執行的 ,由於實例化對象時 會自動執行init方法,而init方法執行了run函數
class A: def __init__(self): self.run() def run(self): pass class B(A): def run(self): print('xxxx') b = B()
。。。