vue中侦听器computed、watch、method的使用区别和使用场景

属性在vue中的查找顺序:data>methods>watch>computed

方法使用场景是否具有缓存机制缺点
methods写逻辑,触发事件,函数封装只要data中有属性发生变化重新渲染视图,方法就会重新执行一次,使用watch来监听单个元素的更新
watch当某个属性发生改变时,需要做某些事情的时候同一个结果,监听多个元素的时候,冗余
computed根据data中属性值计算得到新的值时,必须return一个结果有多个属性决定,当依赖属性发生变化的时候,才执行

区别:
1.有无缓存机制:
method:当页面重新渲染的时候method中的方法会重新执行,无缓存机制。
watch和computed:只有涉及watch和computed的方法中的依赖属性(即使用到的属性)变化时,才会执行,如果不涉及,该属性的值仍然是之前留在缓存中的值,具有缓存机制。
2.computed:一般用于计算某属性值,由其他属性发生变化而变化,最后得出该属性的值
watch:主要用于监听当某个属性值发生变化时,会引起得其他操作。
在computed中默认会有get和set的方法,我们可以监听一个没有在data中的变量,当给这个变量赋值的时候,我们就会走set的方法,调用时走get的方法;

在这里插入代码片
<div id="root">
	{{info}}
</div>
<script>
	var vm = new Vue({
		el:'#root',
		data:{
			age:'23',
			name:'zzh'
		},
		computed:{
			info:{
				set:function(value){
					var arr = value.split(" ");
					this.age = arr[0];
					this.name = arr[1];
				},
				get:function(){
					return "my name is" + this.name+",i am" + this.age+"years old";
				}
			}
		}
	});
</script>
//以下都是控制台上的操作,给info赋值
vm.info = "23zzh";//走set函数,为其他两个变量赋值,页面要输出info,则走get函数;
console.log(info);// my name is zzh, i am 23 years old

watch中监听对象中的属性时候,直接监听不能获取到,需要开启深度监听deep:true,然后在handler中处理value和oldValue

computed使用场景二(做模糊查询) :

<div>
        <input type="text" v-model="mytext" />
        <ul>
            <li v-for="data in list" :key="data">
                {{data}}
            </li>
        </ul>
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el: '#box',
            data: {
                datalist: ["aaa", "bbb", "ccc", "ddd", "add", "cee", "eee"],
                mytext: ''
            },
            computed: {
                list() {
                    //indexOf返回存在字符串得下标,不存在返回-1,str.IndexOf("")空字符串返回0
                    //每次mytext输入的内容变化的时候,都会触发计算,返回过滤后的数组,filter不会改变原数组
                    return this.datalist.filter(item => item.indexOf(this.mytext) > -1);
                }
            },
        });
    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值