手挽手帶你學VUE入門三檔,VUE構造器內部的各類屬性的使用,methods,computed,watch,filters這四個屬性,在工做中會常常用到。還有不少混合屬性例如mixin等,後期會有視頻單獨介紹,咱們如今先作到入門能夠開發,不經常使用的用法後期會給你們補充,學完這一期,你已經能夠開發一個小項目玩一下了。html
methods是咱們VUE中的事件處理器,你能夠把方法寫在這裏面,而且在構造器內部經過this.方法名調用,以前的學習中咱們已經使用過這個方法,可是這裏強調一下,千萬不能夠用箭頭函數,畢竟這裏咱們的this是須要指向VUE實例的。在VUE構造器的外部咱們也能夠經過實例來調用方法。這裏給你們舉個例子。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .active{ color:red } </style> </head> <body> <div id="app"> <button v-on:click="add">+</button>{{num}}<button @click="minus">-</button> <!-- 這裏咱們經過click來調用了add和minus方法 --> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el:"#app", data:{ num:1 }, methods:{ add(){ this.num++ }, minus(){ this.num-- this.testMet()//這裏咱們經過this來調用事件處理器內的方法 }, testMet(){ console.log("我被調用了") } } }) app.testMet()//這裏咱們經過app實例來調用事件處理器內的方法 </script> </body> </html>
還記得咱們第一期講的那個在差值表達式內寫簡單的JS表達式嗎{{message.split('').reverse().join('')}}, 實際上這樣處理數據是不優雅的,VUE爲咱們提供了computed這個選項來處理數據,咱們稱它爲計算屬性,當邏輯複雜的時候 咱們就應當使用 computed計算屬性了。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .active{ color:red } </style> </head> <body> <div id="app"> <p>Original message: "{{ message }}"</p> <p>Computed reversed message: "{{ reversedMessage }}"</p> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { message: 'Hello' }, computed: { // 計算屬性的 getter reversedMessage: function () { // `this` 指向 app 實例 return this.message.split('').reverse().join('') } } }) </script> </body> </html>
這是一個計算屬性的簡單用例,實際上,計算屬性內部存在get和set兩個方法,咱們稱他爲 getter和setter,這裏我給你們上代碼講解。vue
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .active{ color:red } </style> </head> <body> <div id="app"> <p>{{firstName}}</p> <p>{{lastName}}</p> <p>{{fullName}}</p> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { firstName: 'Foo', lastName: 'Bar', }, computed: { // 計算屬性的 getter fullName:{ // getter 在使用數據的時候觸發 get: function () { return this.firstName + ' ' + this.lastName }, // setter 在修改數據的時候觸發 newValue 就是咱們修改完成之後的數據 set: function (newValue) { var names = newValue.split(' ') this.firstName = names[0] this.lastName = names[names.length - 1] } } } }) </script> </body> </html>
vm.fullName = 'John Doe' 你們能夠在外部直接修改fullName或者在控制檯修改 均可以觸發fullName的set事件來修改 firstName和lastNamenpm
Vue中咱們想要盯着一個數據,在它發生變化的時候就要作什麼事,這時候咱們就要用到watch偵聽器。 具體用法也是很簡單的,咱們先來一個淺監聽。每次改變都會觸發監聽的function 它接受兩個參數 當前的val和改變前的 oldval,咱們能夠根據這個作出判斷
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .active{ color:red } </style> </head> <body> <div id="app"> <p>{{Name}}</p> <p>{{ChangeName}}</p> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { Name: 'QM', ChangeName: 'Cool', Names: 'QMS', NameDeep: 'QMDeep', NameImm: 'QMImm', NameObj:{ QM: 'shuai' } }, watch:{ Name:function (val,oldval) { // 能夠直接在這裏寫方法 console.log(val,oldval) }, Names:[ function (val,oldval) { // 多個方法可使用數組的形式 console.log(val,oldval) }, function (val,oldval) { // 多個方法可使用數組的形式 console.log(val,oldval) } ], // 深度 watcher NameDeep: { handler: function (val, oldVal) { /* ... */ }, deep: true }, // 該回調將會在偵聽開始以後被當即調用 NameImm: { handler: function (val, oldVal) { /* ... */ }, immediate: true }, //Obj的形式 'NameObj.QM':function (val, oldVal){ /* ... */ } } }) </script> </body> </html>
Vue.js 容許你自定義過濾器,可被用於一些常見的文本格式化。過濾器能夠用在兩個地方:雙花括號插值和 v-bind 表達式 (後者從 2.1.0+ 開始支持)。過濾器應該被添加在 JavaScript 表達式的尾部,由「管道」符號指示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .active{ color:red } </style> </head> <body> <div id="app"> <!-- 在 `v-bind` 中 --> <div v-bind:id="rawId | capitalize"> <!-- 在雙花括號中 --> {{ message | capitalize }} </div> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { message: "test", rawId: "change" }, filters:{ 'capitalize':function(value){ if (!value) return '' value = value.toString() return value.charAt(0).toUpperCase() + value.slice(1) } } }) </script> </body> </html>