1、computed,methods,和watch
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="demo">
<p>原数据{{message}}</p>
<p>反转后的数据{{ reversedMessage() }}</p>
</div>
<script>
var demo = new Vue({
el: ‘#demo‘,
data: {
message :‘abcdefg‘,
num:5
},
methods:{
reversedMessage(){
return this.message.split(‘‘).reverse().join(‘‘)
},
}
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="app1">{{text}}</div>
<div id="app2">{{ reverseText}}</div>
<script>
var app1 = new Vue({
el: ‘#app1‘,
data: {
text: ‘computed‘
}
});
var app2 = new Vue({
el: ‘#app2‘,
computed: {
reverseText: function(){
return app1.text.split(‘‘).reverse().join(‘‘);
}
}
});
</script>
</body>
</html>
计算属性只有在它的相关依赖发生改变的时候才会重新求值,这就意味着只要message还没有发生改变,多次访问reversedMessage计算属性立即返回的是之前计算的结果,而不会再次执行计算函数,而对于methods方法,只要发生重新渲染,methods调用总会执行该函数。
如果某个计算属性a需要的遍历一个极大的数组和做大量的计算,可以减小性能开销,如果不希望有缓存,则用methods。
Watch
<body>
<div id="app">
<input type="text" v-model="num">
</div>
<script src="vue.js"></script>
<script>
new Vue({
el: '#app',
data: {
num: ''
},
watch: {
num(newVal, oldVal) {
// 监听 num 属性的数据变化
// 作用 : 只要 num 的值发生变化,这个方法就会被调用
// 第一个参数 : 新值
// 第二个参数 : 旧值,之前的值
console.log('oldVal:',oldVal)
console.log('newVal:',newVal)
}
}
})
</script>
</body>
Watch和computed的区别:
Watch
watch用于观察和监听页面上的vue实例,当你需要在数据变化响应时,执行异步操作,或高性能消耗的操作,那么watch为最佳选择
computed
可以关联多个实时计算的对象,当这些对象中的其中一个改变时都会触发这个属性
具有缓存能力,所以只有当数据再次改变时才会重新渲染,否则就会直接拿取缓存中的数据。