计算属性 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不肯定能实现