Vue 计算属性和侦听器(watch和computed)

1.watch:用来侦听data中已存在的数据的变化(只能监视单个变量) ,对于数组和对象的改变 要用深度监听。

(因为监听的是对象的地址。修改数组或对象时地址并没有改变 改变的是指定地址中的值)

<!DOCTYPE html>
<html>
<head>
	<title>计算属性和侦听器(watch和computed)</title>
	<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>

</head>
<body>
	<div id="app">dgdgdgsdgg</div>
	<script>
		var App = {
			template:`
				<div>
					<input type="text" v-model="msg">
					<input type="text" v-model="list[0].name">
					<input type="text" v-model="list[0].age">

				</div>
			`,
			data() {
				return {
					msg:665,
					list:[{name:'John','age':12}]
				}
			},
			watch: {
				msg(newVal,oldVal) {
					console.log(this.msg);
					console.log(newVal); //返回msg未改变前的值
					console.log(oldVal); //返回msg改变后的值
				},
				list() { //在变异 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。所以这里完全不会被调用到,需要对对象或数组进行深度观察
					console.log(this.list[0].name);
					console.log(this.list[0].age);
				},
				//对数组进行深度观察
				list: {
					deep:true,
					handler:function() {
						console.log('深度监视成功!!!!');
						console.log(this.list);
						console.log(this.list[0].name);
						console.log(this.list[0].age);
					}
					
				}
			}
		}
		new Vue({
			el:document.getElementById('app'),
			components: {
				App
			},
			template: '<App />'
		})
	</script>
</body>
</html>

 

 2.computed:用来侦听data中已存在的数据的变化(侦听多个变量),返回新的变量。

计算属性具有缓存。计算属性是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时才会重新求值 .

<!DOCTYPE html>
<html>
<head>
	<title>计算属性和侦听器(watch和computed)</title>
	<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>

</head>
<body>
	<div id="app">dgdgdgsdgg</div>
	<script>
		var App = {
			template:`
				<div>
					<input type="text" v-model="msg">
					<input type="text" v-model="list[0].name">
					<input type="text" v-model="list[0].age">
					<p>{{result}}</p>
				</div>
			`,
			data() {
				return {
					msg:665,
					list:[{name:'John','age':12}]
				}
			},
			computed: {
				result() {
					return this.msg + this.list[0].name + this.list[0].age;
				}
			}
		}
		new Vue({
			el:document.getElementById('app'),
			components: {
				App
			},
			template: '<App />'
		})
	</script>
</body>
</html>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值