【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当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...
最新文章
- GRDB自定义的纯函数
- netbeans调试_从NetBeans运行和调试WildFly Swarm应用程序
- PYTHON招聘需求与技能体系
- EditPlus构建轻量级编译环境
- matlab7.0 6.5,任何处理matlab6.5与7.0.1的兼容问题
- 消息队列面试 - 如何保证消息队列的高可用?
- 【C语言】数据结构C语言版 实验6 树
- java word文档内容比较_Java 比较两个Word文档差异
- 苹果支付在哪里设置_你会用苹果手机吗?这些快捷指令快速设置一下,好用度提升10倍...
- 微信视频号视频怎么下载?
- 阳光/海浪/沙滩/美女/泳装——51CTO.com两周年出游
- 在CentOS上安装和配置OpenNebula入门实例
- 迁移学习笔记4:ACML-Sinno Jialin Pan
- office 文档 在线预览功能实现(word,excel,pdf,ppt等多种格式)——使用https://view.xdocin.com/view 提示文档过期——基础积累
- 适配Android Q上读取多媒体文件
- Python切割图集
- 站内搜寻引擎 php mysql_迅搜(xunsearch) - 开源免费中文全文搜索引擎|PHP全文检索|mysql全文检索|站内搜索...
- 树莓派实验中关于配置水位传感器的初步应用
- JAVA Idea中各个包.idea,out,src,web所放类的作用说明
- 【PTA】求交错序列前N项和
热门文章
- java常见对象_Java各种对象理解
- anaconda使用github代码_使用这几款插件,能让你在GitHub看代码的效率翻倍
- ResNet原理和实现
- 如何把winform图片背景换成透明颜色_如何用photoshop更换图片背景颜色?
- Android和iPhone应用程序界面布局示例
- o oia ospf 路由优先_乾颐堂军哥HCIE课程4-OSPF的3、4、5类LSA以及虚连接和转发地址的理论与实践...
- Vue.js 基础学习
- Focal Loss 的Pytorch 实现以及实验
- 神经网络入门回顾(感知器、多层感知器)
- 解决ssh无密码登录不成功的问题