本文我们通过案例来介绍一下vue中 watchcomputed 的使用规则,案例效果如下:

以上案例就是实现一个简单的 名称拼接处理。实现的方式有很多,本文我们将采用以下三种方式来实现。

1、DOM对象操作

我们可以通过普通的dom对象操作来实现这个效果:

首先给三个 input 输入框和 vm实例 做双向绑定,然后给前两个输入框分别绑定 keyup 事件,并且在 vm 实例的 methods 中定义拼接名称的方法即可。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body><div id="app"><input type="text" v-model='one' @keyup='getres'> + <input type="text" v-model='two' @keyup='getres'> =<input type="text" v-model='res'> </div><script>var vm = new Vue({el: "#app",data: {one:'',two:'',res:''},methods: {getres(){this.res = this.one + '-' + this.two}}})</script>
</body>
</html>

2、watch方法

watch 会监视 data 中指定的数据,当这些数据发生变动的时候会触发对应的 function 来处理相关的业务。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body><div id="app"><input type="text" v-model='one'> + <input type="text" v-model='two'> =<input type="text" v-model='res'> </div><script>var vm = new Vue({el: "#app",data: {one:'',two:'',res:''},methods: {},watch:{'one':function(to,from){this.res = this.one + '-' + this.two},'two':function(to,from){this.res = this.one + '-' + this.two}}})</script>
</body>
</html>

此处可能大家会比较疑惑,watch 需要监视 onetwo 这两个信息,而我们通过 keyup 只需要在 methods 中定义一个方法就可以了,感觉 watch 反而没有前面例子中来的方便,那么 watch 还有什么作用呢?

注意:前面的事件监听只能处理 DOM元素,而针对 路由 的变化就无能为力了,我们来看看下面这个案例。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/vue-router/3.4.3/vue-router.min.js"></script>
</head>
<body><div id="app"><router-link to="/login">登录</router-link><router-link to="/register">注册</router-link><router-view></router-view></div><script>// 创建两个组件var login = {template: "<h1>这是一个登录组件</h1>"}var register = {template: "<h1>这是一个注册组件</h1>"}var routerObj = new VueRouter({routes:[{ path : "/login" , component : login },{ path : "/register" , component : register }]})var vm = new Vue({el: "#app",data: {},methods: {},router: routerObj})</script>
</body>
</html>

现在我们希望能够在路由变化的时候,捕获到这个行为,并给出响应。这时我们可以通过监视 vm.$route.path 来处理。

var vm = new Vue({el: "#app",data: {},methods: {},router: routerObj,watch:{'$route.path':function(newVal,oldVal){if(newVal == '/login'){alert('欢迎进入登录页面')}else if(newVal == '/register'){alert('这是注册界面')}}}
})

watch 监视路由变化的效果就搞定了~

3、computed方法

computed 中,可以定义一些属性,这些属性叫做 计算属性, 计算属性的本质就是一个方法,只不过,我们在使用这些计算属性的时候,是把它们的名称直接当作属性来使用的,而不会把计算属性当作方法去调用。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body><div id="app"><input type="text" v-model='one'> + <input type="text" v-model='two'> =<input type="text" v-model='res'> </div><script>var vm = new Vue({el: "#app",data: {one:'',two:'',},methods: {},computed: {'res':function(){return this.one + '-' + this.two},},})</script>
</body>
</html>

注意:

  • 计算属性在引用的时候,一定不要加 () 去调用,直接把它当作普通属性去使用就好。
  • 只要计算属性的 function 内部所用到的任何 data 中的数据发送了变化,就会立即重新计算这个计算属性的值。
  • 计算属性的求值结果会被缓存起来,方便下次直接使用。如果计算属性方法中任何数据都没有发生过变化,则不会重新求值。

methods、watch、computed的区别

元素 描述
methods 表示一个具体的操作,主要书写业务逻辑。
watch 一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行具体的业务逻辑操作,可以看作是computed和methods的结合体。
computed 属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算,主要当作属性来使用。

【Vue】一个案例带你搞懂methods、watch及computed的使用规则相关推荐

  1. 【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系

    从作用机制和性质上看待methods,watch和computed的关系 图片标题[原创]:<他三个是啥子关系呢?> 首先要说,methods,watch和computed都是以函数为基础 ...

  2. vue族谱架构_【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系...

    之前一直在博客园写作,最近几天才开的知乎专栏,才疏学浅, 谬误之处请不吝于评论区指教,谢谢大家.从作用机制和性质上看待methods,watch和computed的关系 watch和computed的 ...

  3. 一个例子带你搞懂python作用域中的global、nonlocal和local

    在编程中,只要接触过函数的,我相信都理解什么是全局变量和局部变量,概念比较简单,这里就不做解释了.在python中,用global语句就能将变量定义为全局变量,但是最近又发现有个nonlocal,一时 ...

  4. 一个实例带你搞懂Apriori关联分析算法

    关联分析 Apriori算法 优点:易编码实现. 缺点:在大数据集上可能较慢. 适用数据类型:数值型或者标称型数据. 关联分析是一种在大规模数据集中寻找有趣关系的任务.这些关系可以有两种形式:频繁项集 ...

  5. 一文带你搞懂C#多线程的5种写法

    一文带你搞懂C#多线程的5种写法 1.简介 超长警告! 在学习本篇文章前你需要学习的相关知识: 线程基本知识 此篇文章简单总结了C#中主要的多线程实现方法,包括: Thread 线程 ThreadPo ...

  6. 【回炉重造】带你搞懂什么是机器学习?

    带你搞懂什么是机器学习? 机器学习介绍 什么是机器学习: 机器学习应用案例: 机器学习程序开发流程: 1. 获取数据: 2. 清洗数据: 3. 训练模型: 4. 测试模型: 5. 投入使用: 开发环境 ...

  7. Vue一个案例引发「内容分发slot」的最全总结

    今天我们继续来说说 Vue,目前一直在自学 Vue 然后也开始做一个项目实战,我一直认为在实战中去发现问题然后解决问题的学习方式是最好的,所以我在学习一些 Vue 的理论之后,就开始自己利用业余时间做 ...

  8. 一文带你搞懂从动态代理实现到Spring AOP

    摘要:本文主要讲了Spring Aop动态代理实现的两种方式. 1. Spring AOP Spring是一个轻型容器,Spring整个系列的最最核心的概念当属IoC.AOP.可见AOP是Spring ...

  9. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

最新文章

  1. GRDB自定义的纯函数
  2. netbeans调试_从NetBeans运行和调试WildFly Swarm应用程序
  3. PYTHON招聘需求与技能体系
  4. EditPlus构建轻量级编译环境
  5. matlab7.0 6.5,任何处理matlab6.5与7.0.1的兼容问题
  6. 消息队列面试 - 如何保证消息队列的高可用?
  7. 【C语言】数据结构C语言版 实验6 树
  8. java word文档内容比较_Java 比较两个Word文档差异
  9. 苹果支付在哪里设置_你会用苹果手机吗?这些快捷指令快速设置一下,好用度提升10倍...
  10. 微信视频号视频怎么下载?
  11. 阳光/海浪/沙滩/美女/泳装——51CTO.com两周年出游
  12. 在CentOS上安装和配置OpenNebula入门实例
  13. 迁移学习笔记4:ACML-Sinno Jialin Pan
  14. office 文档 在线预览功能实现(word,excel,pdf,ppt等多种格式)——使用https://view.xdocin.com/view 提示文档过期——基础积累
  15. 适配Android Q上读取多媒体文件
  16. Python切割图集
  17. 站内搜寻引擎 php mysql_迅搜(xunsearch) - 开源免费中文全文搜索引擎|PHP全文检索|mysql全文检索|站内搜索...
  18. 树莓派实验中关于配置水位传感器的初步应用
  19. JAVA Idea中各个包.idea,out,src,web所放类的作用说明
  20. 【PTA】求交错序列前N项和

热门文章

  1. java常见对象_Java各种对象理解
  2. anaconda使用github代码_使用这几款插件,能让你在GitHub看代码的效率翻倍
  3. ResNet原理和实现
  4. 如何把winform图片背景换成透明颜色_如何用photoshop更换图片背景颜色?
  5. Android和iPhone应用程序界面布局示例
  6. o oia ospf 路由优先_乾颐堂军哥HCIE课程4-OSPF的3、4、5类LSA以及虚连接和转发地址的理论与实践...
  7. Vue.js 基础学习
  8. Focal Loss 的Pytorch 实现以及实验
  9. 神经网络入门回顾(感知器、多层感知器)
  10. 解决ssh无密码登录不成功的问题