
开篇寄语
继续探索Vuejs的精进用法,有关之前的入门文章,具体可以参看下方的前情提要,本篇文章则是着重来聊一下有关methods,computed和watch这三个概念,从简单到困难一应俱全。
前情提要
内容详情
本篇也是以Vue3版本来示例,与Vue2的版本区别并不算大。
- method
- 要向组件实例添加方法,我们使用 methods 选项,这应该是一个包含所需方法的对象,试想一个按钮,按下后,文本数字加1,试举例如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>methods demo</title>
</head>
<body>
<div id="app">
<p>{{ num }}</p>
<button @click="addItem">Add</button>
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
const app = Vue.createApp({
data() {
return {
num: 1,
}
},
methods: {
addItem() {
this.num++
}
}
});
app.mount("#app")
</script>
</body>
</html>
- computed
- data属性可以传递数据,但是在处理复杂数据的过程中会显得臃肿,此时就需要用到computed属性,那么该属性该如何使用呢?试举一例:
- computed适用于数据联动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>methods demo</title>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="app" v-cloak>
<button @click="addItem">Add</button>
<ul>
<li v-for="(item, index) in list" :key="index">
<a :href="item.url">{{ item.name }}</a>
</li>
</ul>
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
const app = Vue.createApp({
data() {
return {
num: 1,
requestList: [
'Google-https://www.google.com',
'Github-https://github.com',
'行运设计师-https://luckydesigner.space'
]
}
},
computed: {
list: function() {
var list = [];
this.requestList.map(function(item, index) {
var tempArr = item.split('-');
list.push({
name: tempArr[0],
url: tempArr[1]
});
})
return list;
}
},
methods: {
addItem() {
this.num++;
this.requestList.push('行运设计师' + this.num + '-https://luckydesigner.space')
}
}
});
app.mount("#app")
</script>
</body>
</html>
除了这种方式外,computed属性还可以设置setter和getter,试举例如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>computed demo</title>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="app" v-cloak>
<h2>fullName</h2>
{{fullName}}
<h2>firstName</h2>
{{firstName}}
<h2>lastName</h2>
{{lastName}}
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
const app = Vue.createApp({
data() {
return {
firstName: "Boheng",
lastName: "Zhang",
}
},
computed: {
fullName: {
get: function() {
return this.firstName + " " + this.lastName
},
set: function(value) {
var list = value.split(' ');
this.firstName = list[0]
this.lastName = list[1]
}
}
},
});
app.mount("#app")
</script>
</body>
</html>
- watch
- 虽然计算属性在大多数情况下更合适,但有时需要自定义观察器,他可以监听值/表达式的变化来执行回调函数,监听一般只监听一个数量或变化。
- watch适用于异步场景
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>watch demo</title>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="app" v-cloak>
<h2>fullName</h2>
{{watchFullName}}
<h2>firstName</h2>
{{firstName}}
<h2>lastName</h2>
{{lastName}}
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
const app = Vue.createApp({
data() {
return {
firstName: "Boheng",
lastName: "Zhang",
watchFullName: "Zhang Boheng",
age: 18,
}
},
watch: {
firstName: function(newFirstName, oldFirstName) {
this.watchFullName = this.firstName + this.lastName
},
lastName: function(newLastName, oldLastName) {
this.watchFullName = this.firstName + this.lastName
}
},
});
app.mount("#app")
</script>
</body>
</html>
- 我的微信
- 微信扫一扫加好友
-
- 我的微信公众号
- 扫描关注公众号
-





