怎么在vue中使用 Watch和Computed

发布时间:2021-05-21 15:42:46 作者:Leah
来源:亿速云 阅读:145

本篇文章给大家分享的是有关怎么在vue中使用 Watch和Computed,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

01. 监听器watch

(1)作用

export default {
    data() {
        return {
            number: 1
        }
    },
    watch:{
        // 普通监听方法,这里表示监听data中的 number属性
        // 第一个参数表示改变后的新值,第二个参数表示改变前的旧值
        number(newVal,oldVal){
            console.log(newVal);
            console.log(oldVal);
        }
    }
}

(2)属性和方法

export default {
    data(){
        return {
            number: 1
        }
    },
    watch: {
        // 监听 number属性
        number: {
			handler(newVal, oldVal){
                
            },
            immediate: true, // 立即监听
        }
    }
}

(3)监听对象

export default {
    data() {
        return {
            obj: {
                a: 1
            }
        }
    },
    watch: {
        obj: {
            handler(newVal){
                console.log('监听到了', newVal)
            },
            immediate: true
        }
    },
    created(){
        // 无法监听到,因为是对属性进行的修改操作
        // 打印一次,且打印结果为修改后的值,
        this.obj.a = 2 

        // 可以监听到,因为是直接对 对象进行的 赋值操作
        // 打印两次(immediate立即监听会打印一次,修改时打印一次)
        this.obj = { a: 2} 
    }
}

由于 Vue 会在初始化实例时,会对属性执行 getter/setter 转化过程

所以属性必须在 data 对象上存在,才能让 Vue 转换它,这样才能让它是响应式的

因此,Vue 无法检测到对象属性的添加、删除、修改等操作

默认情况下 handler 只监听对象内部属性的引用的变化

因此,我们只有进行赋值操作的时候,它才会监听到

export default {
    watch: {
        'obj.a': {
            handler(newVal){
                console.log(newVal)
            }
        }
    },
    created(){
        // 以下两个都可以监听到 打印两次
        this.obj.a = 2
        this.obj = { a:2 }
    }
}

这是因为,this.$set()就是相当于在data中对初始值进行改变

它可以触发监听,但变化体现不出来,即newVal === oldVal

export default {
    watch: {
        obj: {
            handler(newVal){
            	console.log(newVal)
            },
            deep: true,
            immediate: true
        }
    },
    created(){
        // 进行深度监听后,直接修改属性的变化也可以监听到
        // 打印两次(因为immediate)
        this.obj.a = 2
        
        // 无法监听到 对象属性的增加
        // 打印一次,且打印结果为添加了新增属性的对象
        // 即,它只会 因immediate而执行一次 ,且打印输出 {a:1,b:2}
        this.obj.b = 2
        
        // 可以触发监听,但无法监听到变化
        // 打印两次,两次值都是{a:2},不能体现变化
        this.$set(this.obj, 'a', 2)
    }
}

(4)监听数组

数组方法如pop()、push()等,和this.$set(arr, index, newVal)方法

它们可以触发监听,但无法体现变化,即newVal === oldVal

export default {
    data() {
        return {
            arr: [1]
        }
    },
    watch: {
        arr: {
            handler(newVal, oldVal) {
                console.log('新:', newVal)
                console.log('旧:', oldVal)
            },
            immediate: true
        }
    },
    created() {
        // 可以监听到---直接整个数组赋值
        this.arr = [2]
        
        // 无法监听到---索引赋值、长度修改
        this.arr[1] = 2
        this.arr[0] = 2
        this.arr.length = 2
        
        // 可以触发监听,但无法监听到变化 => 即新、旧值都是一样的
        this.arr.push(2)
        this.$set(this.arr, 0, 2)
    }
}

02. 计算属性computed

(1)计算属性的set方法

computed: {
  fullName: {
    get () {
      return `${this.firstName} ${this.lastName}`;
    },
    set (val) {
      const names = val.split(' ');
      this.firstName = names[0];
      this.lastName = names[names.length - 1];
    }
  }
}

当执行 this.fullName = 'Aresn Liang',computed 的 set 就会调用,firstName 和 lastName 就会被赋值为 Aresn 和 Liang

computed 可以依赖其它 computed,甚至是其它组件的 data

(2)区别

(3)使用场景

vue是什么

Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的区别是,使用Vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用Vue可以采用单文件组件和Vue生态系统支持的库开发复杂的单页应用。

以上就是怎么在vue中使用 Watch和Computed,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. 怎么在vue中利用watch在对象内监听属性
  2. 怎么在vue中监听对象

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue watch computed

上一篇:如何在Java中使用RESTful接口

下一篇:怎么在JavaScript中使用canvas实现七彩太阳光晕效果

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》