視訊教程
由於掘金不支援視訊連結 視訊請移步 www.henrongyi.top
你能學到什麼
手挽手帶你學VUE入門三檔,VUE構造器內部的各種屬性的使用,methods,computed,watch,filters這四個屬性,在工作中會經常用到。還有很多混合屬性例如mixin等,後期會有視訊單獨介紹,我們現在先做到入門可以開發,不常用的用法後期會給大家補充,學完這一期,你已經可以開發一個小專案玩一下了。
methods選項
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>
複製程式碼
computed選項
還記得我們第一期講的那個在差值表示式內寫簡單的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,這裡我給大家上程式碼講解。
<!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和lastName
watch選項
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>
複製程式碼
filters選項
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>
複製程式碼