详解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实现用方向键控制层的上下左右移动
Jan 13 Javascript
JS中Iframe之间传值及子页面与父页面应用
Mar 11 Javascript
jquery实现鼠标滑过小图时显示大图的方法
Jan 14 Javascript
JS实现单行文字不间断向上滚动的方法
Jan 29 Javascript
jQuery实现拖拽效果插件的方法
Mar 23 Javascript
百度地图给map添加右键菜单(判断是否为marker)
Mar 04 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
Jun 06 Javascript
JS实现的几个常用算法
Nov 12 Javascript
原生js轮播(仿慕课网)
Feb 15 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
详解Vue2.5+迁移至Typescript指南
Aug 01 Javascript
JavaScript 防篡改对象的用法示例
Apr 24 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
杏林同学录(九)
2006/10/09 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
React路由管理之React Router总结
2018/05/10 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
欢迎标语大全
2014/06/21 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript
详解MySQL的内连接和外连接
2023/05/08 MySQL