【Vue】一个案例带你搞懂methods、watch及computed的使用规则
本文我们通过案例来介绍一下vue中 watch
和 computed
的使用规则,案例效果如下:
以上案例就是实现一个简单的 名称拼接处理。实现的方式有很多,本文我们将采用以下三种方式来实现。
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
需要监视 one
和 two
这两个信息,而我们通过 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的使用规则相关推荐
- 【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系
从作用机制和性质上看待methods,watch和computed的关系 图片标题[原创]:<他三个是啥子关系呢?> 首先要说,methods,watch和computed都是以函数为基础 ...
- vue族谱架构_【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系...
之前一直在博客园写作,最近几天才开的知乎专栏,才疏学浅, 谬误之处请不吝于评论区指教,谢谢大家.从作用机制和性质上看待methods,watch和computed的关系 watch和computed的 ...
- 一个例子带你搞懂python作用域中的global、nonlocal和local
在编程中,只要接触过函数的,我相信都理解什么是全局变量和局部变量,概念比较简单,这里就不做解释了.在python中,用global语句就能将变量定义为全局变量,但是最近又发现有个nonlocal,一时 ...
- 一个实例带你搞懂Apriori关联分析算法
关联分析 Apriori算法 优点:易编码实现. 缺点:在大数据集上可能较慢. 适用数据类型:数值型或者标称型数据. 关联分析是一种在大规模数据集中寻找有趣关系的任务.这些关系可以有两种形式:频繁项集 ...
- 一文带你搞懂C#多线程的5种写法
一文带你搞懂C#多线程的5种写法 1.简介 超长警告! 在学习本篇文章前你需要学习的相关知识: 线程基本知识 此篇文章简单总结了C#中主要的多线程实现方法,包括: Thread 线程 ThreadPo ...
- 【回炉重造】带你搞懂什么是机器学习?
带你搞懂什么是机器学习? 机器学习介绍 什么是机器学习: 机器学习应用案例: 机器学习程序开发流程: 1. 获取数据: 2. 清洗数据: 3. 训练模型: 4. 测试模型: 5. 投入使用: 开发环境 ...
- Vue一个案例引发「内容分发slot」的最全总结
今天我们继续来说说 Vue,目前一直在自学 Vue 然后也开始做一个项目实战,我一直认为在实战中去发现问题然后解决问题的学习方式是最好的,所以我在学习一些 Vue 的理论之后,就开始自己利用业余时间做 ...
- 一文带你搞懂从动态代理实现到Spring AOP
摘要:本文主要讲了Spring Aop动态代理实现的两种方式. 1. Spring AOP Spring是一个轻型容器,Spring整个系列的最最核心的概念当属IoC.AOP.可见AOP是Spring ...
- 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器
前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...
最新文章
- 变步长龙格库塔法matlab代码,matlab 龙格库塔法 变步长龙格库塔法.doc
- IIS Server is too busy 解决方法(IIS6)
- 设计模式-结构性模式
- C#统计子字符串出现次数(转帖,http://www.it130.cn/)
- 不会做特征工程的 AI 研究员不是好数据科学家!上篇 - 连续数据的处理方法 本文作者:s5248 编辑:杨晓凡 2018-01-19 11:32 导语:即便现代机器学习模型已经很先进了,也别
- IE 8兼容小妙招~~
- Qt工作笔记-Qt文档阅读笔记-qualifiedName()的官方解析及XML使用名称空间
- 27、简述redis的有哪几种持久化策略及比较?
- android ListView几个比较特别的属性
- java 并发编程实例_java并发编程应用实例
- tensorflow之读取jpg图像长和宽
- 国士工作室 企业级Android软件开发和实战培训专家
- 如何解决logcat TAG过长时Android studio提示错误的问题
- 4K标准---电视显示标准(ITU-R BT.2020)
- Linux中格式化(擦除)DVD + RW / DVD-RW磁盘
- Dual-edge triggered flip_flop(Dualedge)
- 装机不求人,10 分钟完成电脑配置挑选
- 电子元器件B2B电商平台建设方案:优化企业商流,拓宽B2B交易渠道
- 打印选课学生名单(25)
- 对于噪声数据理解以及Min-Max 规范化和 Score规范化(零-均值规范化)的实例【数据预处理】
热门文章
- 5分钟了解VMware vSAN的分布式RAID
- java后台传一个对象到前台_前台判断对象中的一个布尔值_前后台分离的项目中,如何优雅的传输boolean类型的参数...
- vb教材笔记_VB课堂笔记-----第五章 数据的输入与输出
- vue中用watch监听路由信息
- queue模块的使用
- python读excel
- 6-3 二叉树的重建 uva536
- mysqldump备份表中有大字段失败的排错过程
- Html5不可见标签,及标签属性(元素对象属性) a href target name id 相对路径
- CSS设置超出指定宽度自动换行