计算属性和侦听器都可以监听到data区数据的变化,当数据变化时可以触发方法的调用,从而在方法内部可以进行相应的逻辑处理。

计算属性的语法格式是:computed: {}

侦听器的语法格式是:watch: {}

一、计算属性

    计算属性一般是为了简化模板中的内容,让模板中内容尽可能简洁。如果我们将太多的逻辑写在模板中,模板将会变得难以维护。

下面举一反例,我们将字符串逆序的逻辑写在模板中。

<div id="app">  <div id="example">    {{ message.split('').reverse().join('') }}  div>div><script>  let vm = new Vue({    el: '#app',    data: {      message: 'Hello World'    }  })script>

如果我们将字符串逆序的逻辑抽取到计算属性中,模板会更清晰,改造如下:

<div id="app">  <div id="example">    {{ resMsg }}  div>div><script>  let vm = new Vue({    el: '#app',    data: {      message: 'Hello World'    },    computed: {      resMsg() {        return this.message.split('').reverse().join('')      }    }  })script>

我们在computed中声明了一个计算属性resMsg,通过这个属性来接收变量message逆序之后的值。

火眼金睛的你应该发现了resMsg更像一个方法,而不像一个属性。这是因为计算属性的简写方式导致,不是它的原始样子,原始样子如下:

computed: {  resMsg: {    get() {      return this.message.split('').reverse().join('')    }  } }

计算属性默认只有get方法,当只有get方法时,就可以进行简写。

当然,如果有需要,我们可以为计算属性提供它的set方法,set方法在计算属性的值被修改时自动调用。这个特性一般在前后端交互时,数据格式不一致时会用到。比如时间、金钱等等在前后端的格式就通常不一样。

我们以钱为例来说明一下set方法的应用场景。

通常情况下,后端为了避开浮点数存储不精确的问题,会以分为单位进行整数存储。然而,前端在展示的时候,通常是以元为单位,这时两个单位就不一致,它们相差100倍。

现在前端通过接口调用,拿到的钱是100分,赋值给cents变量,该值要转化成元在页面上展示,我们就可以声明一个yuan的计算属性去实现。当计算属性yuan被修改时,对应的分又要赋值到cents变量上,这时候set方法就派上用场了,代码如下

<div id="app">  分:{{cents}}  <hr>  元:{{yuan}}  <hr>  改变元:<input type="text" v-model="yuan">div><script>  let vm = new Vue({    el: '#app',    data: {      cents: 100    },    computed: {      yuan: {        get: function () {          return this.cents / 100;        },        set: function (newVal) {          this.cents = newVal * 100        }      }    }  })script>

我们就通过set方法自动被调用的特性,在方法内部,将元转变成分,并赋值给cents变量。

通常情况下,我们只会用到get方法,所以简写形式居多,但不要把它当做方法。它跟方法是不一样的,方法的每次调用,方法内部逻辑都会执行一遍。计算属性却不会,它具备基于依赖的缓存能力。下面例子来证实这个现象。

<div id="app">  <div>{{reverseMsg}}div>  <div>{{reverseMsg}}div>  <hr>  <div>{{reverseStr(msg)}}div>  <div>{{reverseStr(msg)}}div>div><script>  let vm = new Vue({    el: '#app',    data: {      msg: 'Hello'    },    computed: {      reverseMsg() {        console.log('computed')        return this.msg.split('').reverse().join('')      }    },    methods: {      reverseStr() {        console.log('method')        return this.msg.split('').reverse().join('')      }    }  })script>

上面代码中,计算属性在模板中使用了两次,方法调用也使用了两次,我们查看打印发现

方法中的打印语句执行了两次,而计算属性中的打印语句却只执行了一次。这就验证了,计算属性的简写形式虽然长得跟方法一模一样,但它确实不是方法。

二、侦听器

侦听器也可以监听到data中的数据变化,当data中某个变量的数据发生变化时,对应的侦听器方法就会被执行,侦听器的方法名必须跟被侦听的变量名一样

<div id="app">  <label> 名:    <input type="text" v-model="firstName">  label>  <br>  <label> 姓:    <input type="text" v-model="lastName">  label>  <br>  {{fullName}}div><script>  let vm = new Vue({    el: '#app',    data: {      firstName: 'Jim',      lastName: 'Green',      fullName: 'Jim Green'    },    watch: {      firstName(val) {        console.log('firstName has changed')        this.fullName = val + ' ' + this.lastName      },      lastName(val) {        console.log('lastName has changed')        this.fullName = this.firstName + ' ' + val      }    }  })script>

firstName(val)就是监听firstName变化时被调用的函数,lastName(val)就是监听lastName变化时被调用的函数。运行页面如下:

当我们修改firstName的值时,firstName(val)方法就会被调用,并且新值会传递给val变量,我们利用新值可以去更新fullName变量。

侦听器的应用场景通常是数据变化时需要执行异步操作开销较大的操作

总结

    计算属性和侦听器有相似之处,又有不同之处。相似之处是,它们都可以监听到数据的变化,从而执行自己的处理逻辑。但是它们的应用场景是不一样的,平常开发中,计算属性使用频率更高。

vue修改计算属性的值_Vue语法高级之计算属性和侦听器相关推荐

  1. 【前端——vue】:过滤器、侦听器、计算属性、vue-cli、vue组件、动态组件、插槽、自定义属性、路由

     一.过滤器 1.过滤器Filters(只能在vue2中使用) p标签里面看到的是后面函数的返回值,message相当于作为参数传给后面.竖线代表要调用过滤器. 过滤器函数必须定义到filters节点 ...

  2. 侦听器watch及其和计算属性、methods方法的总结

    目录 一.watch侦听器 二.侦听器的处理函数 解决深度监听新老值同源问题 三.侦听器的格式 1. 方法格式的侦听器 2.对象格式的侦听器 四.侦听器watch.计算属性.methods方法的总结 ...

  3. Vue-watch侦听器和计算属性

    watch侦听器 watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作. 使用方法: const vm=new Vue({el:"#app",data:{us ...

  4. 面试点:五句话教你计算属性和和侦听器区别

    在面试官问你计算属性和侦听器有什么区别时,他想听到的核心就是下面这五句话 (0)功能不同,计算属性用于解决模板语法冗余问题,侦听器侦听data中每一个数据变化 (1)计算属性有缓存机制,侦听器没有缓存 ...

  5. vue修改计算属性的值_「Vue学习记录五」计算属性和侦听器

    1: 计算属性: (内置缓存机制) 当更改age的时候, fullName 函数不执行: 当更改fristName的时候, fullName 函数才执行 <div id = "app& ...

  6. VUE基本使用---安装、开始使用介绍、Vue实例、模板语法、计算属性和侦听器、class与style绑定

    原文在我的博客:https://www.liboer.top/articles/detail/vue-BasedUse/ 文章目录 VUE.js 基础 安装 CDN 下载 安装 命令行工具(CLI脚手 ...

  7. Vue 过滤器、计算属性、侦听器 图解版 一目了然

    文章目录 本篇学习目标 1. vue基础 1.0_vue基础 v-for更新监测 1.1_vue基础_v-for就地更新 1.2_vue基础_虚拟dom 1.3_vue基础_diff算法 情况1: 根 ...

  8. Vue——计算属性与侦听器

    目录 一.计算属性 1.基本使用 2.复杂使用 3.getter和setter 4.计算属性和methods的对比 二.侦听器 1.watch的用法 一.计算属性 1.基本使用 ​ 现在有变量姓氏和名 ...

  9. Vue.js 计算属性和侦听器

    计算属性和侦听器 计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example" ...

最新文章

  1. HTML DOM Attribute 对象
  2. Android后台杀死系列之二:ActivityManagerService与App现场恢复机制
  3. 梅州有学java的地方吗,梅州java工资水平,梅州java工资很高吗,梅州java工资底薪能到多少...
  4. Linux使用错误小结(CentOS)- yum更新软件失败
  5. linux将所有文件生成lst_Linux自定义repo文件
  6. 面试了一个 39 岁程序员,全程让我都感觉有点慌.....
  7. SpringMVC 另一种基于xml的处理器、适配器(了解)
  8. 【乐理知识】第二章 音符 休止符
  9. Web测试实践——每日例会记录12.30(1)
  10. 《MYSQL必知必会》—18.如何使用MySQL的Match()和Against()函数进行全文本搜索以及查询扩展的使用
  11. 使用Python抓取google街景照片
  12. 反向传播神经网络概念,反向传播算法作用
  13. 中国银行网点全集数据
  14. 小米10系列详细参数对比,小米10 青春版\10\10Pro\10至尊纪念版
  15. C/C++ EasyX 立方体与超立方体的投影 与 伸缩和旋转变换
  16. excel poi 自动换行_Java利用POI生成Excel强制换行
  17. [转]教你修复win7中复制粘贴失效的问题
  18. 物联网协议之一:MQTT协议和kafka
  19. java使用正则表达式获取字符串中的所有英文单词或数字
  20. 君正X1830芯片性能和处理器介绍

热门文章

  1. 【Tech】Mac上安装MAMP打开本地网页
  2. 计算机网络学习笔记-1.1.4-时延、 时延带宽积、RTT和利用率
  3. 在运行Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7003
  4. MFC关键技术-动态创建
  5. linux怎么抓sip包,Ubuntu下使用Wireshark进行抓包分析(含SIP和RTP包)
  6. 软件测试知识产权保护,一种软件测试方法及软件测试系统专利_专利申请于2017-09-07_专利查询 - 天眼查...
  7. mysql数据表数据丢失6_MYSQL数据表损坏的原因分析和修复方法小结
  8. python支持向量机_支持向量机(SVM)Python实现
  9. linux将一个文件的内容复制到另一个新的文件
  10. 应用层(知识架构图)