下面是本文的屏幕录像的在线视频:

温馨提示:

1、视频下载:线上视频被压缩处理,可以下载高清版本:

链接:https://pan.baidu.com/s/1qUekWio3fpWToT9PiECpEg 提取码:v962

2、示例代码:https://pan.baidu.com/s/1rCqbY_j35FcRWRZbuOfHqg 提取码:79kh

下图是文章大纲:

一、概述

本篇文章介绍了Vue.js 3.x的侦听器,包括:什么是侦听器?侦听器的基本使用;以及侦听器和计算属性的对比,及其各自适应的场景。

二、侦听器

虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。(什么时候需要自定义侦听器呢?)这就是为什么Vue通过watch选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

示例代码:04-Watcher.html
如上图所示,数据项中有1个question数据,将其绑定到了input元素上,当在input元素上修改内容时,绑定的question数据项也会同步修改。而此时watch中检测的question函数就会被触发。也就是说,只要watch侦听的数据项发生了改变,就会触发对应的监听函数。完整的代码如下所示:

<html><head><title>Vue 3.x的侦听器</title><script src="https://unpkg.com/vue@next"></script><script src="https://cdn.jsdelivr.net/npm/axios@0.12.0/dist/axios.min.js"></script><script src="https://cdn.jsdelivr.net/npm/lodash@4.13.1/lodash.min.js"></script></head><body><div id="container"><p>Ask a yes/no question:<input v-model="question" /></p><p>{{ answer }}</p></div></body><script>const HelloVueApp = {data() {return {question: "",answer: "I cannot give you an answer until you ask a question!",};},watch: {// 如果 `question` 发生改变,这个函数就会运行。question: function (newQuestion, oldQuestion) {this.answer = "Waiting for you to stop typing...";this.debouncedGetAnswer();},},created: function () {// `_.debounce` 是一个通过Lodash限制操作频率的函数。// 在这个例子中,我们希望限制访问 yesno.wtf/api 的频率AJAX请求直到用户输入完毕才会发出。// 想要了解更多关于`_.debounce` 函数 (及其近亲 `_.throttle`) 的知识,请参考:https://lodash.com/docs#debounce// 重点:当调用动作n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间。this.debouncedGetAnswer = _.debounce(this.getAnswer, 500);},methods: {getAnswer: function () {if (this.question.indexOf("?") === -1) {this.answer = "Questions usually contain a question mark. ;-)";return;}this.answer = "Thinking...";var vm = this;axios.get("https://yesno.wtf/api").then(function (response) {debugger;vm.answer = _.capitalize(response.data.answer); // 首字母大写。}).catch(function (error) {vm.answer = "Error! Could not reach the API. " + error;});},},};let vm = Vue.createApp(HelloVueApp).mount("#container");</script>
</html>

运行上述代码,打开的页面效果如下图所示:

在这个示例中,使用watch选项允许我们执行异步操作(访问一个API),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。
除了watch选项之外,您还可以使用命令式的vm.$watch API。
至此,我们做如下的总结:
1、为什么是执行异步操作的时候需要使用watch呢?而不是计算属性呢?因为计算属性需要的是立即返回结果值,而使用了异步则无法直接做到这点。
2、那为什么开销较大的操作推荐使用侦听器?而不是计算属性呢?同样也是和计算属性需要立即返回结果值有关。

三、计算属性vs侦听属性

Vue提供了更通用的方式来观察和响应Vue实例上的数据变动:侦听属性。当你有一些数据需要随着其它数据变动而变动时,你很容易滥用watch,特别是如果你之前使用过AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的watch回调。细想一下这个例子:

示例代码:05-Watcher.html
上面代码是命令式且重复的。将它与计算属性的版本进行比较:

示例代码:06-Computed.html
和侦听属性的方式比较起来,此处的计算属性确实简便了很多。

四、参考资料

  • https://v3.vuejs.org/guide/computed.html
  • https://cn.vuejs.org/v2/guide/computed.html
    书籍《Vue.js实战》第04章 v-bind及class与style绑定 第02节 绑定class的几种方式

光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第02节 侦听器相关推荐

  1. 光脚丫思考Vue3与实战:第04章 模板语法 第01节 概述+插值

    下面是本文的屏幕录像的在线视频: 光脚丫思考Vue3与实战:第04章 模板语法 第01节 插值 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baid ...

  2. 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第01节 计算属性

    下面是本文的屏幕录像的在线视频: 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1MiGKmrzp40i1ZD_4borteQ ...

  3. 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第03节 计算属性的其他玩法

    下面是本文的屏幕录像的在线视频: 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1h600_BRR9O2Lr87zVQNgEw ...

  4. 光脚丫思考Vue3与实战:第04章 模板语法 第03节 指令的修饰符

    下面是本文的屏幕录像的在线视频: 第03节 指令的修饰符 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1J08bPvs6OI ...

  5. 光脚丫思考Vue3与实战:第02章 安装Vue.js

    下面是本文的屏幕录像的在线视频: 02-安装Vue.js 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本:https://pan.baidu.com/s/16594YUpNNrkjZf ...

  6. 光脚丫思考Vue3与实战:第03章 Vue实例

    下面是本文的屏幕录像的在线视频: 03-Vue实例 04-生命周期示意图+钩子函数 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 03-Vue实例:https://pan.baid ...

  7. 光脚丫思考Vue3与实战:第01章 初步认识Vue3

    下面是本文的屏幕录像的在线视频: 01-初步认识Vue.js-PART1 01-初步认识Vue.js-PART2 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: PART1:http ...

  8. 光脚丫思考Vue3与实战:第04章 模板语法 第04节 指令的缩写

    下面是本文的屏幕录像的在线视频: 第04节 指令的缩写 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1Dd2HeUXH6DZ ...

  9. 光脚丫思考Vue3与实战:第04章 模板语法 第02节 指令的参数+动态参数

    下面是本文的屏幕录像的在线视频: 第02节 指令的参数+动态参数 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/11_hwQF ...

最新文章

  1. 第一篇,试试功能如何
  2. react-native 打包apk
  3. Update operation on extension field created by AET
  4. matlab meshgrid函数_从零开始的matlab学习笔记——(28)立体图切面与三视图
  5. Js返回顶部实例代码
  6. 基于JSP的旅游网站论文
  7. 操作系统-课堂笔记-磁盘调度(南航)
  8. Linux脏牛漏洞提权
  9. Leetcode 006. Z 字形变换 | 每日一题
  10. win10一直卡在欢迎界面进不去怎么办
  11. 不来了解下JVM支持的语言有哪些?
  12. 推荐:12条经过验证的创业赚钱秘诀!(转)
  13. K8S:Volume
  14. 泰拉瑞亚 Terraria Mac版
  15. C语言sfr定义一个变量,单片机c语言的sbit和sfr
  16. 小白笔记---坐标系、坐标参照系、坐标变换、投影变换
  17. 黑苹果新手指导:名词解释常用软件常见问题说明
  18. java 判断当前时间是月初还是月末 和 指定日期月初月末
  19. 高会职称计算机课程,高会职称计算机《Frontpage 2000网页制作》全部开通
  20. 少数人的 “坏”,多数人的 “懒”

热门文章

  1. SCAPE: shape completion and animation of people
  2. go项目标准化工程结构解析
  3. 武汉大学信管专业期末复习系列——《信息检索》(第十章)信息检索的应用
  4. Spark入门知识--Day7
  5. SpringSecurity
  6. 数据化管理:洞悉零售及电子商务运营 | 学习笔记 (全)
  7. python代码画樱花-你用代码写作业,他用Python让樱花绽放,美哭了!
  8. 京东软件测试工程师招聘信息,【京东工资】软件测试工程师待遇-看准网
  9. 科技版“传音入密”:音频聚光灯现在怎么样了?
  10. halcon功能及应用简介