详解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 相关文章推荐
Jquery CheckBox全选方法代码附js checkbox全选反选代码
Jun 09 Javascript
两个listbox实现选项的添加删除和搜索
Mar 01 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
May 03 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
Oct 09 Javascript
Javascript 字符串模板的简单实现
Feb 13 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
May 09 Javascript
JS实现获取当前URL和来源URL的方法
Aug 24 Javascript
jquery pagination分页插件使用详解(后台struts2)
Jan 22 Javascript
Angular4实现鼠标悬停3d倾斜效果
Oct 25 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
Element 默认勾选表格 toggleRowSelection的实现
Sep 04 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
Nov 10 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
CSS+JS构建的图片查看器
2006/07/22 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
python实现12306火车票查询器
2017/04/20 Python
python和shell获取文本内容的方法
2018/06/05 Python
python skimage 连通性区域检测方法
2018/06/21 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
Python with标签使用方法解析
2020/01/17 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
护士检查书
2014/01/17 职场文书
校本教研工作制度
2014/01/22 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
白鹤梁导游词
2015/02/06 职场文书
辩护词格式
2015/05/22 职场文书
工作后的感想
2015/08/07 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle