第1题:创建以一个vue实例,并使用计算属性和方法实现一个字符串翻转的操作,写出核心代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>字符翻转操作</title>
</head>
<body>
<div id="demo">
<p>{{text}} 原始字符</p>
<p>{{text.split(',').reverse().join(',')}} 方法翻转</p>
<p>{{reverseText}} 计算属性翻转</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
var app = new Vue({
el: '#demo',
data: {
text: '123, 456, 789'
},
computed:{
reverseText:function(){
return this.text.split(',').reverse().join(',')
}
}
})
</script>
</body>
</html>
第2题:何时使用模板内表达式?何时使用计算属性
模板内的表达式实际上只用于简单的运算,对于复杂逻辑,使用计算属性。
我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A 。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代
第3题:计算缓存 vs Methods,两者的区别
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>字符翻转操作</title>
</head>
<body>
<div id="demo">
<p>{{text}} 原始字符</p>
<p>{{text.split(',').reverse().join(',')}} 方法翻转</p>
<p>{{reverseText}} 计算属性翻转</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
var app = new Vue({
el: '#demo',
data: {
text: '123, 456, 789'
},
computed:{
reverseText:function(){
return this.text.split(',').reverse().join(',')
}
}
})
</script>
</body>
</html>
该例子中text不变,多次访问reverseText计算属性会立即返回之前的计算结果而不必再次执行函数
计算属性和Methods两种方式的最终结果相同,但是计算属性是基于他们的依赖进行缓存的,只有在相关依赖发生改变是他们才会从新求值。每当触发重新渲染时,调用Methods总会再次执行函数。
我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A 。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代。
第 4 题:实例化一个vue实例,在data中定义一个姓氏firstName和名字firstName,还有一个全称叫fullName。
需求:分别使用watch监听器和计算属性来实现以下功能实现,只要姓氏firstName和名字firstName中的任意一个改变,全称fullname就会改变
提示:fullName = firstName + firstName。
<div id="nameWrap">{{ fullName }}</div>
watch
var app = new Vue({
el: '#nameWrap',
data: {
firstName: 'Xiao',
lastName: 'Ming',
fullName : 'Xiao Ming'
},
watch: {
firstName: function (val) {
this.fullName = val + ' ' + this.lastName
},
lastName: function (val) {
this.fullName = this.firstName + ' ' + val
}
}
})
计算属性
var app = new Vue({
el: '#nameWrap',
data: {
firstName: 'Xiao',
lastName: 'Ming'
},
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
})
网友评论