001_计算属性和侦听属性(h3)
-
模板是简单的声明式逻辑,对于任何复杂逻辑,你都应当使用计算属性。
-
watch 侦听属性 通常用来监听单个,监听多个需要写重复代码。当需要在数据变化时执行异步或开销较大的操作时,侦听属性是最有用的。
-
computed 计算属性 通常用来监听多个,多数情况下更合适
-
我们可以通过在表达式中调用方法来达到和使用计算属性同样的效果
-
不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。
-
当watch监听的是复杂数据类型的时候需要做深度监听
-
computed 监视对象,写在了函数内部, 凡是函数内部有this.相关属性,改变都会触发当前函数
-
源代码
<html>
<head>
<title></title>
</head>
<body>
<div id="app">
<div>watch侦听基本数据类型</div>
<input type="text" name="aaaaaaaaaaaaaa" class="bbbbbbbbbbbbbb" v-model='msg01_dl'>
<div>watch侦听复杂数据类型</div>
<input type="text" name="" v-model='msg02_dl.text02_dl'>
<div>computed计算属性</div>
(<input type="text" name="" v-model='n1'>+
<input type="text" name="" v-model='n2'>)*
<input type="text" name="" v-model='n3'>={{result}}
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
new Vue({
el:'#app',
data(){
return {
msg01_dl:'initial_value_dl',
msg02_dl:{text02_dl:'initial_value_dl'},
n1:'',
n2:'',
n3:'1'
}
},
// computed监听多个
computed:{
result(){
return (Number(this.n1)+Number(this.n2))*Number(this.n3)
}
},
// watch监听单个
watch:{
/* watch监基本数据类型 第一个参数是新数据,第二个参数是旧数据*/
msg01_dl(newval,oldval){
if(newval=='caojiwan'){
alert(newval)
}
},
/* watch监复杂数据类型 第一个参数是新数据,第二个参数是旧数据*/
msg02_dl:{
handler(newval,oldval){
if(newval.text02_dl=='caojiwan'){
alert(newval.text02_dl)
}
},
deep:true
}
}
})
</script>
</body>
</html>
- 浏览器界面