【Vue】----- computed与watch的区别
时间:2019-04-20
本文章向大家介绍【Vue】----- computed与watch的区别,主要包括【Vue】----- computed与watch的区别使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.computed
- computed是一种计算属性,用来监听属性的变化;
- computed里面的方法调用的时候不需要加(),并且里面的方法必须要有一个返回值;
- computed里面的方法不是通过事件来去触发的,而是当data中的属性发生了改变的时候会被触发;
- computed最大的特点是当属性没有发生改变的时候,当前方法的值会从缓存中读取。
1 <div id="app">
2 <input type="text" v-model.number="a">
3 <input type="text" v-model.number="b">
4 <button @click="handleAdd()">计算</button>
5 <p>结果为:{{sum}}</p> <!-- 执行methods中的add()方法后返回的结果 -->
6 <p>computed结果:{{count}}</p> <!-- 执行computed中的count()方法后返回的结果 -->
7 </div>
1 new Vue({ 2 el:"#app", 3 data:{ 4 a:"", 5 b:"", 6 sum:"" 7 }, 8 methods:{ 9 handleAdd(){ 10 this.sum = this.a+this.b; //只有点击事件触发时才会改变 11 } 12 }, 13 computed:{ 14 count(){ 15 return this.a+this.b; //实时监听,只要data中数据发生改变返回的结果就会改变 16 } 17 } 18 })
2. watch
- watch用来监听每一个属性的变化;
- watch这个对象里面都是函数,函数的名称是data中的属性名称,watch中的函数是不需要调用的;
- 当属性发生改变时就会触发watch中的函数,每一个函数都会接受到2个值,一个值是新值,一个是旧值。可以在watch当中进行新旧值的判断来减少虚拟DOM的渲染;
- 只要属性发生改变就会触发它所对应的函数;
- 如果我们需要对对象进行监听的时候,需要将属性设置为key值,val值为一个对象。对象中有2个参数,一个是handler函数,另一个是deep为true,这样才能实现深度监听。
1 <div id="app"> 2 <input type="text" v-model.number="a"> 3 <input type="text" v-model.number="b"> 4 <p>结果:{{sum}}</p> 5 <hr> 6 <input type="text" v-model="obj.name"> 7 <input type="text" v-model="obj.age"> 8 </div>
1 new Vue({ 2 el:"#app", 3 data:{ 4 a:"", 5 b:"", 6 sum:"", 7 obj:{ 8 name:"pinpinkc", 9 age:18 10 } 11 }, 12 watch:{ 13 a(newVal,oldVal){ 14 if(newVal != oldVal){ 15 this.sum = newVal+this.b; 16 } 17 console.log("a发生了改变",newVal,oldVal) 18 }, 19 b(newVal,oldVal){ 20 this.sum = newVal+this.a; 21 console.log("b发生了改变",newVal,oldVal) 22 }, 23 obj:{ 24 handler(newVal){ 25 console.log("obj发生了改变",newVal) 26 }, 27 deep:true 28 } 29 } 30 })
3. computed与watch的区别
- computed在调用的时候不需要加() , watch不需要调用;
- computed如果属性没有发生改变的时候会存缓存中读取值 , watch当属性发生改变的时候会接受到2个值,一个为新值,一个为旧值;
- computed里面的函数必须要有一个return返回结果;
- watch如果需要监听对象的情况下必须设置深度监听;
- computed里面函数的名称可以随意命名,但是watch中函数的名称必须是data中属性的名称。
- 一斤代码深入理解系列(三):微信小程序和服务器通信
- C#CreateGraphics方法的三种实现方式
- 一斤代码深入理解系列(四):微信小程序和服务器通信-WebSocket
- linux学习第十四篇:查看磁盘,文件大小命令:df,du;磁盘分区
- 二叉树的性质和常用操作代码集合
- linux学习第十五篇:磁盘格式化,磁盘挂载,手动增加swap空间
- 《Java程序设计基础》 第8章手记Part 2
- 备忘录模式
- 《Java程序设计基础》 第8章手记Part 1
- 你很有想法,跟我学做菜吧No.3
- 《数据结构》 定长顺序串常用操作代码集合
- 一斤代码深入理解系列(七):微信小程序中使用微信风格样式库-WeUI
- 餐厅老板要累疯了No.2
- linux学习第十九篇:压缩介绍,gzip,bzip2,xz压缩工具
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用 HTTP/2 提升性能的几个建议
- 玩树莓派(raspberry pi) 2/3 raspbian的遇到的一些问题
- Dnsmasq加速本地DNS请求
- swoole深入学习 2. tcp Server和tcp Client
- 一切皆Socket
- Go代码重构:23倍的性能爆增
- 分布式系统的一致性协议之 2PC 和 3PC
- Docker快速搭建WordPress博客网站
- Elasticsearch入门,这一篇就够了
- 玩转 lua in Redis
- 用docker快速搭建wordpress博客
- 生产环境优雅的重启基于Nginx、Tornado的Web服务进程
- nginx记录post body/payload数据 日志用打印出结果
- nginx的location、rewrite玩法详解
- Redis Lua脚本调试