乐趣区

关于vue.js:Vue计算属性和监听属性

计算属性 computed

应用场景:当页面中有某些数据依赖其余数据进行变动的时候,能够应用计算属性

计算属性 computed 是基于 data 中数据进行解决的,data 数据变动,他也跟着变动

当 data 中数据没有产生扭转时,咱们调用 computed 中函数 n 次,只会进行缓存(执行一次)每个计算属性都蕴含两个 set、get 属性

监听属性 watch

应用场景:数据变动时执行异步或开销较大的操作,能够随时批改状态的变动

watch: 相似于监听机制 + 事件机制。

在大部分状况下咱们都会应用 computed,但如果要在数据变动的同时进行异步操作或者是比拟大的开销,那么 watch 为最佳抉择。watch 为一个对象,键是须要察看的表达式,值是对应回调函数。值也能够是办法名,或者蕴含选项的对象。

<template>
    <div>
        <input v-model="fristName" /> <br>
        <input v-model="lastName" />
        <div> 计算属性批改值:{{cfullName}}</div>
        <div> 监听属性批改值:{{wfullName}}</div>
    </div>
</template>
<script>
    export default {data() {
            return {
                fristName: '',
                lastName: '',
                wfullName: ''
            }
        }
        computed: {
            // 残缺写法
            cfullName:{
                // 1. 有人读取 fullName 时调用
                // 2. 初始化是后调用, 依赖数据变动调用
                get() {return this.fristName + '-' + this.lastName}
                // 当 fullName 被批改时候调用
                set(newVal) {let arr = newVal.split('-')
                    this.fristName = arr[0]
                    this.lastName = arr[1]
                }
            }
            // 简写形式(只用到 get,不须要 set)fullName() {return this.fristName + '-' + this.lastName}
        }
        watch: {
            // 残缺写法
            fristName:{
                // 是否首次加载就监听,默认 false
                immediate: true,
                // 是否深度监听,默认 false,列入监听的是一个对象,外面的数据要监听,就要 deep
                deep: true,
                handler(newVal,oldVal){this.wfullName = oldVal + '-->' + newVal}
            }
            // 简写
            fristName(newVal,oldVal){this.wfullName = oldVal + '-->' + newVal}
        }
    }
    
    // watch 还有一种写法
    // 残缺写法
    vm.$watch('fristName',{
        // 是否首次加载就监听,默认 false
        immediate: true,
        // 是否深度监听,默认 false,列入监听的是一个对象,外面的数据要监听,就要 deep
        deep: true,
        handler(newVal,oldVal){this.wfullName = oldVal + '-->' + newVal}
    })
    // 简写
    vm.$watch('fristName', function(newVal,oldVal){this.wfullName = oldVal + '-->' + newVal})
</script>

methods computed watch 三者区别

  1. methods 不存在缓存,执行一次运行一次,执行 n 次,运行 n 次
  2. computed 有缓存,调用屡次只会执行一次,不能执行异步工作
  3. watch 能执行异步工作,computed 能实现的,watch 能实现,watch 能实现的,computed 不肯定能实现
退出移动版