一、计算属性

1.计算属性

计算方式不能复用,且不好维护

<div id="example">
{{ message.split('').reverse().join('') }}
</div>

 计算方式比较复杂或者重复使用时可以用计算属性

 

<div id="vm">
<div id="example">
<p>Original message: "{{ message }}"</p>
<p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
</div>
<script>
Vue.createApp({
data(){
return { message: 'Hello'}
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// `this` 指向 vm 实例
return this.message.split('').reverse().join('')
}
}
}).mount('#vm')
</script>

2.计算属性的缓存设计

计算属性是基于它们的响应式依赖进行缓存的,如果数据没有发生改变,下次调用方法时会使用上一次的结果

<script>
const v = Vue.createApp({
computed: {
now1() {
return Date.now()
}
},
methods: {
now2() {
console.log(Date.now())
}
}
}).mount('#vm')
</script>

vue3 计算属性和侦听器_缓存

 3.计算属性的setter

 计算属性只能读,不能写

<div id="vm">
{{a}}
</div>
<script>
const v = Vue.createApp({
computed: {
a() {
return 10;
}
}
}).mount('#vm')
</script>

vue3 计算属性和侦听器_Vue_02

 添加赋值功能

<div id="vm">
{{ i }}
</div>
<script>
const v = Vue.createApp({
data() {
return {
i: 10
}
},
computed: {
a: {
get() {
return this.i;
},
set(value) {
this.i = value;
}
}
}
}).mount('#vm')
</script>

vue3 计算属性和侦听器_Vue_03

 

二、侦听器

 需要在数据变化时执行异步或开销较大的操作时使用

<div id="vm">
<p>
Ask a yes/no question:
<input v-model="question" />
</p>
<p>{{ answer }}</p>
</div>
<script>
const v = Vue.createApp({
data() {
return {
question: '',
answer: 'Questions usually contain a question mark. ;-)'
}
},
watch: {
question(newQuestion, oldQuestion) {

}
},
methods: {
getAnswer() {
this.answer = 'Thinking...'
axios
.get('https://yesno.wtf/api')
.then(response => {
this.answer = response.data.answer
})
.catch(error => {
this.answer = 'Error! Could not reach the API. ' + error
})
}
}
}).mount('#vm')
</script>