详解vue中computed 和 watch的异同


Posted in Javascript onJune 30, 2017

一、computed 和 watch 都可以观察页面的数据变化。当处理页面的数据变化时,我们有时候很容易滥用watch。 而通常更好的办法是使用computed属性,而不是命令是的watch回调。

这里我直接引用vue官网的例子来说明:

html:

我们要实现 第三个表单的值 是第一个和第二个的拼接,并且在前俩表单数值变化时,第三个表单数值也在变化

<div id="myDiv">
  <input type="text" v-model="firstName">
  <input type="text" v-model="lastName">
  <input type="text" v-model="fullName">
</div>

js: 用watch方法来实现

new Vue({
 el: '#myDiv',
 data: {
  firstName: 'Foo',
  lastName: 'Bar',
  fullName: 'Foo Bar'
 },
 watch: {
  firstName: function (val) {
   this.fullName = val + ' ' + this.lastName
  },
  lastName: function (val) {
   this.fullName = this.firstName + ' ' + val
  }
 }
})

js: 利用computed 来写

new Vue({
    el:"#myDiv",
      data:{
        firstName:"Den",
        lastName:"wang",

      },
      computed:{
        fullName:function(){
          return this.firstName + " " +this.lastName;
        }
      }
  })

很容易看出 computed 在实现上边的效果时,是更简单的。

二 、 详解 comouted 计算属性。

在vue的 模板内({{}})是可以写一些简单的js表达式的 ,很便利。但是如果在页面中使用大量或是复杂的表达式去处理数据,对页面的维护会有很大的影响。这个时候就需要用到computed 计算属性来处理复杂的逻辑运算。

1.优点:

在数据未发生变化时,优先读取缓存。computed 计算属性只有在相关的数据发生变化时才会改变要计算的属性,当相关数据没有变化是,它会读取缓存。而不必想 motheds方法 和 watch 方法是的每次都去执行函数。

2.setter 和 getter方法:(注意在vue中书写时用set 和 get)

  1. setter 方法在设置值是触发。
  2. getter 方法在获取值时触发。
computed:{
  fullName:{
  //这里用了es6书写方法
    set(){
       alert("set");
    },
    get(){
      alert("get");
      return this.firstName + " " +this.lastName;
    },

  }
 }

三 、watch 方法

虽然计算属性在大多数情况下是非常适合的,但是在有些情况下我们需要自定义一个watcher,在数据变化时来执行异步操作,这时watch是非常有用的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
google 搜索框添加关键字实现代码
Apr 24 Javascript
eval与window.eval的差别分析
Mar 17 Javascript
js面向对象之静态方法和静态属性实例分析
Jan 10 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
Feb 26 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
Sep 30 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
Dec 10 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
Feb 25 Javascript
jQuery实现鼠标滑过图片移动特效
Dec 08 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
vue  自定义组件实现通讯录功能
Sep 30 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
Sep 23 Javascript
JS实现炫酷轮播图
Nov 15 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 #Javascript
vue2.0 axios前后端数据处理实例代码
Jun 30 #Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
Jun 30 #Javascript
MUI实现上拉加载和下拉刷新效果
Jun 30 #Javascript
js实现京东轮播图效果
Jun 30 #Javascript
jquery实现一个全局计时器(商城可用)
Jun 30 #jQuery
Vue和Bootstrap的整合思路详解
Jun 30 #Javascript
You might like
php实现的MySQL通用查询程序
2007/03/11 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
为javascript添加String.Format方法
2020/08/11 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
js性能优化技巧
2015/11/29 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
Element Input组件分析小结
2018/10/11 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
用Python实现数据的透视表的方法
2018/11/16 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
python实现加密的方式总结
2020/01/19 Python
python实现简单猜单词游戏
2020/12/24 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
大学生专科学习生活的自我评价
2013/12/07 职场文书
医学生个人求职信范文
2014/02/07 职场文书
社区两委对照检查材料
2014/08/23 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis