计算属性computed、监听器watch、区别

news/2024/7/10 0:31:27 标签: javascript, vue, vue.js

计算属性  computed

定义:可以理解为能够在里面写一些计算逻辑的属性。

原理:底层借助了Object.defineProperty⽅法提供的getter和setter

get函数什么时候执⾏?

1)初次读取时会执⾏⼀次

2)当依赖的数据发⽣改变的时候会被再次调⽤

set函数什么时候执行?

1)当修改时调用,之后再执行get函数 

作用:

1)减少模板中的计算逻辑
2)数据缓存。当我们的数据没有变化时,不在执行计算的过程
3)依赖固定的数据类型(响应式数据),不能是普通的传入的一个全局数据

<body>
  <div id="root">
    <!-- 组合姓名 -->
    <h2>计算属性的基本使用</h2>
    <hr>
    性:<input type="text" v-model="firstName" id=""><br>
    名:<input type="text" v-model="lastName"><br>
    全名是:{{fullName}}
  </div>
</body>
<script>
  const vm=new Vue({
    el:'#root',
    data:{
      firstName:'张',
      lastName:'三',
    },
    // 计算属性  读写操作  
    computed:{
      // 原始写法
      fullName:{
        // 当有人读取fullName时调用。
        get(){
          console.log("get()被调用了")
          return this.firstName+'-'+this.lastName;
        },
        set(value){//当修改时调用  返回的是value值  set()方法后再调用回get()
          console.log('set被调用了')
          console.log(value)
          let arr=value.split('-')
         console.log(arr);
         this.firstName=arr[0]
         this.lastName=arr[1]
        }
      },

      // 简写形式(只能进行读操作,不可修改)
      // fullName:function  get(){ 
      //     return this.firstName+'-'+this.lastName;
      // },
      fullName(){
        return this.firstName+'-'+this.lastName;
      },
    },
  })
</script>

优势:与methods实现相⽐,内部有缓存机制(复⽤),效率更⾼,调试⽅便  

method ,只要发生重新渲染,method 调用总会执行该函数。

数据量大,需要缓存的时候用 computed ;每次确实需要重新加载,不需要缓存时用 methods 。

监听属性  watch 

watch的作用可以监控一个值的变换,并调用因为变化需要执行的方法。可以通过watch动态改变关联的状态。

3.监听的两种写法:

1)new Vue是传⼊watch配置

2)通过vm.$watch配置 

//第⼆种写法
 vm.$watch('isHot',{
 //当isHot发⽣变化的时候调⽤
 handler(newData,oldData){
 //newData是改变后的数据,oldData是改变前的数据
 console.log(newData,oldData);
 }
 })

deep

当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

<body>
  <div id="root">
    <h2>今天天气{{isHot?'炎热':'凉爽'}}</h2>
    <button @click="changeWeather">切换天气</button>
  </div>
</body>
<script>
  const vm=new Vue({
    el:'#root',
    data:{
      isHot:true,
    },
    methods: {
      changeWeather(){
        this.isHot=!this.isHot;
      }
    },
    // 监听属性  变化时调用
    watch:{
      deep:true,//深度监听  
      // 当isHot发⽣变化的时候调⽤  
      // 第一种方式监听器,原始写法
      isHot:{
        handler(newData,oldData){
          console.log(newData,oldData)
        }
      },

      // 第一种方式简写,演变 
      // isHot:function handler(){
      //   console.log(newData,oldData)
      // },
      // isHot:function(){
      //   console.log(newData,oldData)
      // },
      isHot(newData,oldData){
        console.log(newData,oldData)
      }
    },
  })
</script>

computed和watch的区别

computed主要用于对同步数据的处理watch则主要用于观测某个值的变化去完成一段开销较大的复杂业务逻辑

computed是计算属性

1.支持缓存,只有依赖数据发生改变,才会重新进行计算

2.不支持异步,当computed内有异步操作时无效,无法监听数据的变化

3.computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过的数据通过计算得到的

4.如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed

5.如果computed属性属性值是函数,那么默认会走get方法;函数的返回值就是属性的属性值;在computed中的,属性都有一个get和一个set方法,当数据变化时,调用set方法。

watch是侦听属性

1.不支持缓存,数据变,直接会触发相应的操作;

2.watch支持异步;

3.监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值;

4.当一个属性发生变化时,需要执行对应的操作;一对多;


http://www.niftyadmin.cn/n/553159.html

相关文章

操作系统实验一:处理器调度算法的实现

一、实验目的 &#xff08;1&#xff09;加深对处理机调度的作用和工作原理的理解。 &#xff08;2&#xff09;进一步认识并发执行的实质。 二、实验要求&#xff1a; 本实验要求用高级语言&#xff0c;模拟在单处理器情况下&#xff0c;采用多个调度算法&#xff0c;对N个进程…

引用Vue.js组件的使用

组件的使用 传统开发存在的问题&#xff1a; 依赖关系混乱代码复⽤率不⾼ 在html中引用Vue.js来使⽤组件的三⼤步骤 1. 定义组件 2. 注册组件 3. 使⽤组件 1. 定义组件&#xff08;创建组件&#xff09; 使⽤Vue.extend(options)创建&#xff0c;其中options和new Vue&…

MyBatis Generator 命令行和maven运行方式及乱码解决

mybatis运行方式有很多种&#xff0c;这里记录下自己使用过的两种方式&#xff0c;一种是命令行方式&#xff0c;另一种是使用maven插件的方式。关于mabatis geneartor的运行方式&#xff0c;请参考官方文档&#xff1a; Running MyBatis Generator。 1. 命令行方式&#xff1a…

vue中组件注册及使用

全局注册 1、Vue.prototype 在多个地方都需要使用但不想污染全局作用域的情况下&#xff0c;这样定义&#xff0c;在每个 Vue 实例中都可用。$ 表示这是一个在 Vue 所有实例中都可用的属性 常用于方法、变量等 vue.prototype&#xff1a;实例上挂载属性/方法 每一个vue组件…

vue路由router的基本使用及路由跳转的方式

一、路由与路由器 路由(route):路径和组件的匹配&#xff1b; 路由器(router)&#xff1a;管理这些匹配规则的一个管理者&#xff1b; vue-router的理解 vue的⼀个插件库&#xff0c;专⻔⽤来实现SPA应⽤ 对SPA应⽤的理解 1. 单⻚⾯web应⽤&#xff08;single page web …

C#属性标记Order执行顺序备忘录

部分Attribute有实现IOrderedFilter&#xff0c;其执行顺序机制例子&#xff1a; /// <summary> /// 密码修改 /// </summary> /// <param name"password">密码</param> /// <param name"confirmPassword">确认密码</par…

web前端性能优化方案

回流、重绘会影响网络性能优化 回流: 当render树中的一部分或者全部因为大小边距等问题发生改变而需要重建的过程叫做回流 ( 几何大小和位置发生改变 )重绘: 当元素的一部分属性发生变化&#xff0c;如外观背景色不会引起布局变化而需要重新渲染的过程叫做重绘 ( 文字、边框、…

centos搭建cdh之ssh免密

笔者电脑配置(虚拟机): CDH1(主机): CDH2: 任务一:两台机器配置免密登录 说明:两台机器都使用NAT模式联网 首先确定机器能否联网: 如图:能够联网 按ctrl和C退出 如果不能就查看网络设置是否和虚拟机的一致: 不一样的话手动更改一下; 如果两台机器能够ping通(联网)的话: 接着就是…