本文我们通过案例来介绍一下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. 变步长龙格库塔法matlab代码,matlab 龙格库塔法 变步长龙格库塔法.doc
  2. IIS Server is too busy 解决方法(IIS6)
  3. 设计模式-结构性模式
  4. C#统计子字符串出现次数(转帖,http://www.it130.cn/)
  5. 不会做特征工程的 AI 研究员不是好数据科学家!上篇 - 连续数据的处理方法 本文作者:s5248 编辑:杨晓凡 2018-01-19 11:32 导语:即便现代机器学习模型已经很先进了,也别
  6. IE 8兼容小妙招~~
  7. Qt工作笔记-Qt文档阅读笔记-qualifiedName()的官方解析及XML使用名称空间
  8. 27、简述redis的有哪几种持久化策略及比较?
  9. android ListView几个比较特别的属性
  10. java 并发编程实例_java并发编程应用实例
  11. tensorflow之读取jpg图像长和宽
  12. 国士工作室 企业级Android软件开发和实战培训专家
  13. 如何解决logcat TAG过长时Android studio提示错误的问题
  14. 4K标准---电视显示标准(ITU-R BT.2020)
  15. Linux中格式化(擦除)DVD + RW / DVD-RW磁盘
  16. Dual-edge triggered flip_flop(Dualedge)
  17. 装机不求人,10 分钟完成电脑配置挑选
  18. 电子元器件B2B电商平台建设方案:优化企业商流,拓宽B2B交易渠道
  19. 打印选课学生名单(25)
  20. 对于噪声数据理解以及Min-Max 规范化和 Score规范化(零-均值规范化)的实例【数据预处理】

热门文章

  1. 5分钟了解VMware vSAN的分布式RAID
  2. java后台传一个对象到前台_前台判断对象中的一个布尔值_前后台分离的项目中,如何优雅的传输boolean类型的参数...
  3. vb教材笔记_VB课堂笔记-----第五章 数据的输入与输出
  4. vue中用watch监听路由信息
  5. queue模块的使用
  6. python读excel
  7. 6-3 二叉树的重建 uva536
  8. mysqldump备份表中有大字段失败的排错过程
  9. Html5不可见标签,及标签属性(元素对象属性) a href target name id 相对路径
  10. CSS设置超出指定宽度自动换行