【vue教程】四. Vue 计算属性和侦听器

news2024/12/27 16:00:53

目录

    • 本章涵盖知识点
    • 回顾
    • 计算属性(Computed)
      • 创建计算属性
      • 计算属性的多样性
        • 计算属性的数组过滤
        • 计算属性的复杂表达式
      • 计算属性 vs 方法
      • 计算属性的实例演示
    • 侦听器(Watchers)
      • 创建侦听器
      • 侦听器的高级用法
        • 侦听器的深度观察
        • 侦听器的立即执行
      • 侦听器的实例演示
    • 生命周期钩子函数
      • 生命周期钩子详解
    • 结语

本章涵盖知识点

  • 计算属性(computed)的使用场景
  • 侦听器(watchers)的原理和应用
  • 生命周期钩子函数

回顾

  • 第 1 篇中,我们了解了 Vue 的起源、设计理念以及如何搭建 Vue 开发环境。
  • 第 2 篇中,我们学习了 Vue 实例、模板语法、数据绑定和事件处理。
  • 第 3 篇中,我们探索了组件的创建、注册、props 和事件系统,以及插槽的使用。

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


计算属性(Computed)

计算属性是基于它们的依赖进行缓存的属性。只有当依赖发生变化时,计算属性才会重新计算。

创建计算属性

new Vue({
  data: {
    firstName: "John",
    lastName: "Doe",
  },
  computed: {
    fullName: function () {
      return this.firstName + " " + this.lastName;
    },
  },
});

计算属性的多样性

计算属性不仅限于简单的字符串拼接,它们可以用于执行任何类型的计算,包括对象属性的读取、复杂表达式的计算等。

计算属性的数组过滤
computed: {
  filteredList: function () {
    return this.items.filter(item => item.isVisible);
  }
}
计算属性的复杂表达式
computed: {
  priceWithTax: function () {
    return this.itemPrice * 1.05; // 假设税率为5%
  }
}

计算属性 vs 方法

  • 计算属性是惰性的,只有当依赖发生变化时才会重新计算。它们适用于不需要进行复杂逻辑处理的场合。
  • 方法(methods)每次调用都会执行,适合进行逻辑处理,如 API 请求或异步操作。

计算属性的实例演示

假设我们有一个TodoList组件,我们需要计算已完成的任务数量:

computed: {
  completedTodosCount: function () {
    return this.todos.filter(todo => todo.completed).length;
  }
}

侦听器(Watchers)

侦听器用于观察和响应 Vue 实例上的数据变化。

创建侦听器

new Vue({
  data: {
    username: "",
  },
  watch: {
    username: function (newVal, oldVal) {
      console.log(`Username changed from ${oldVal} to ${newVal}`);
    },
  },
});

侦听器的高级用法

侦听器可以接受选项,如deepimmediate等,以实现更复杂的观察逻辑。

侦听器的深度观察
watch: {
  'user.name': {
    handler: function (newVal, oldVal) {
      // 深度观察user对象中的name属性
    },
    deep: true
  }
}
侦听器的立即执行
watch: {
  searchQuery: {
    handler: 'search',
    immediate: true
  }
},
methods: {
  search: function () {
    // 这个方法将在watcher被创建后立即执行
  }
}

侦听器的实例演示

假设我们需要在用户输入搜索关键词后,从服务器获取搜索结果:

watch: {
  searchQuery: function (newVal, oldVal) {
    if (newVal === oldVal) return;
    this.fetchSearchResults(newVal);
  }
},
methods: {
  fetchSearchResults: function (query) {
    // 发起请求获取搜索结果
  }
}

生命周期钩子函数

Vue 实例的生命周期钩子允许你在实例的生命周期过程中执行代码。

生命周期钩子详解

每个生命周期钩子在 Vue 实例的不同阶段调用,下面是每个钩子的详细说明和示例代码:

  • beforeCreate: 在实例初始化之后,数据观测和事件/侦听器的配置之前被调用。

    new Vue({
      beforeCreate: function () {
        console.log("实例尚未创建");
      },
    });
    
  • created: 实例已经创建完成,但是el属性还没有被处理,datamethods已经可以访问。

    new Vue({
      created: function () {
        console.log("实例已创建,但尚未挂载到DOM");
      },
    });
    
  • beforeMount: 在挂载开始之前被调用,相关的el已经被创建,但是尚未开始渲染过程。

    new Vue({
      el: "#app",
      beforeMount: function () {
        console.log("挂载过程即将开始");
      },
    });
    
  • mounted: 实例已经挂载到 DOM 上,data已经渲染到 DOM,此时可以访问到 DOM 元素。

    new Vue({
      el: "#app",
      mounted: function () {
        console.log("实例已经挂载到DOM");
      },
    });
    
  • beforeUpdate: 数据更新时,虚拟 DOM 重新渲染和打补丁之前调用。

    new Vue({
      data: {
        message: "Hello",
      },
      beforeUpdate: function () {
        console.log("数据更新前");
      },
    });
    
  • updated: 数据更新后,虚拟 DOM 重新渲染和打补丁后调用。

    new Vue({
      data: {
        message: "Hello",
      },
      updated: function () {
        console.log("数据更新完成");
      },
    });
    
  • beforeDestroy: 实例销毁之前调用,实例仍然完全可用。

    new Vue({
      beforeDestroy: function () {
        console.log("实例销毁前");
      },
    });
    
  • destroyed: 实例销毁后调用,datamethods都不可访问。

    new Vue({
      destroyed: function () {
        console.log("实例已经销毁");
      },
    });
    

结语

本文详细介绍了 Vue 的计算属性和侦听器,以及生命周期钩子函数。计算属性提供了一种声明性描述一个值是如何根据组件中其他数据计算得来的方式,侦听器允许我们对数据的变化做出响应,而生命周期钩子函数则让我们可以在 Vue 实例的不同阶段执行特定的逻辑。在下一篇文章中,我们将探讨 Vue 的路由管理,包括 Vue Router 的配置和使用。

欢迎在文章下方留言,分享学习 Vue 计算属性、侦听器和生命周期钩子函数的心得体会,或提出在学习过程中遇到的问题。我们将在后续的文章中提供解答和指导。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1939697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ffmpeg命令基础】过滤处理

文章目录 前言过滤处理的介绍两种过滤类型简单滤波图简单滤波图是什么简单滤波示例 复杂滤波图复杂滤波是什么区别示例 总结 前言 FFmpeg是一款功能强大的开源音视频处理工具,广泛应用于音视频的采集、编解码、转码、流化、过滤和播放等领域。1本文将重点介绍FFmpe…

mysql存储引擎和备份

索引 事务 存储引擎 概念:存储引擎,就是一种数据库存储数据的机制,索引的技巧,锁定水平。 存储引擎。存储的方式和存储的格式。 存储引擎也属于mysql当中的组件,实际上操作的,执行的就是数据的读写I/O。…

ROC曲线和AUC

ROC曲线能更稳定反映模型的性能,对测试集合中数据分布的变化不敏感 AUC:当随机挑选一个正样本和一个负样本,根据当前的分类器计算得到的score将这个正样本排在负样本前面的概率 从AUC判断分类器(预测模型)优劣的标准&a…

【QT开发(19)】2023-QT 5.14.2实现Android开发,使用新版SDK,试图支持 emulator -avd 虚拟机

之前的博客【QT开发(17)】2023-QT 5.14.2实现Android开发,SDK是24.x版本的,虚拟机是32位的,但是现在虚拟机是64位的了,需要升级SDK匹配虚拟机 文章目录 最后的效果1.1 下载最新版 SDK tools (仅限命令行工…

JavaWeb-【3】DOM

笔记系列持续更新,真正做到详细!!本次系列重点讲解后端,那么第一阶段先讲解前端【续上篇CSS和JavaScript】 目录 1、dom介绍 2、html-dom 3、document 4、应用实例 ①、应用实例1 ②、多选框案例 ③、图片切换案例 ④、添…

高性能图数据库Neo4j从入门到实战

图数据库Neo4j介绍 什么是图数据库(graph database) 随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈…

密码学基础-Hash、MAC、HMAC 的区别与联系

密码学基础-Hash、MAC、HMAC 的区别与联系 Hash Hash 是一种从一段数据中创建小的数字“指纹”的方法。就像一个人的指纹代表一个人的信息一样,Hash 对输入的数据进行整理,生成一个代表该输入数据的“指纹” 数据。通常该指纹数据也可称之为摘要、散列…

CefSharp音视频编译与免费下载

注:Cefharp 音频和视频播放编译,生成相应的dll文件,从而支持项目开发。 建议编译至少 16G 的 RAM和至少 250G 的 SSD。该脚本以 E 盘为例,您需要在 E 盘上手动创建 cef 文件夹。禁止在转载后通过发布其他平台向用户收取下载费用。…

全国区块链职业技能大赛第八套区块链产品需求分析与方案设计

任务1-1:区块链产品需求分析与方案设计 医疗健康平台中涉及到医院、医生、患者等参与方,他们需要在区块链医疗健康平台中完成账户注册、身份上链、挂号就诊、查询病例等多种业务活动。通过对业务活动的功能分析,可以更好的服务系统的开发流程。基于医疗健康平台系统架构,以…

【数据结构进阶】二叉搜索树

🔥个人主页: Forcible Bug Maker 🔥专栏: C || 数据结构 目录 🌈前言🔥二叉搜索树🔥 二叉搜索树的实现Insert(插入)find(查找)erase(删除)destro…

毕业/期刊论文发表必备:YOLOv5 / v7 / v8 /v10算法网络结构图【文末提供原型文件下载地址】

前言:Hello大家好,我是小哥谈。同学们在写YOLO算法相关毕业论文/期刊论文的时候,不可避免的会用到相关版本的网络结构图,曾有很多小伙伴私信我索要原型文件,本文就给大家提供YOLOv5/v7/v8/v10版本算法网络结构图及原型文件下载地址。🌈 目录 🚀1.网络结构图 �…

Fiddler 导出请求为curl格式

来自:https://www.cnblogs.com/yudongdong/p/15418181.html Fiddler 下载地址: https://downloads.getfiddler.com/fiddler-classic/FiddlerSetup.5.0.20243.10853-latest.exe 这段代码加到类中 public static RulesOption("关闭请求体转代码", "生成代码&qu…

简单页表和多级页表

地址转换(Address Translation) 内存需要被分成固定大小的页(Page)然后再通过虚拟内存地址(Virtual Address) 到物理内存地址(Physical Address) 的地址转换(Address Translation)才能到达实际存放数据的物理内存位置 简单页表 页表的概念 想要把虚拟内存地址,映…

ip地址是电脑还是网线决定的

在数字化时代的浪潮中,网络已经成为了我们日常生活和工作不可或缺的一部分。当我们谈论网络时,IP地址无疑是一个核心的概念。然而,关于IP地址的分配和决定因素,很多人可能存在误解。有些人认为IP地址是由电脑决定的,而…

pytorch 46 将ASpanFormer模型导出onnx运行

ASpanFormer是一个2022年8月份发布的算法,其主要步骤与LoFTR模型类似,因此无法导出为onnx模型。根据ASpanFormer论文中的数据与效果图,可以确定AsPanFormer是可以作为一个比SP+SG更为有效的方案,其在标准数据集上的效果优于SP+SG,在速度上远超SP+SG,与LoFTR接近;在预测点…

C语言:静态库和动态(共享)库

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 在软件开发中,库(Library)是一个至关重要的概念。它们是由函数和数据的集合构成,用于实现特定的功能,供其他程…

测试——性能测试

内容大纲: 常见的性能问题 性能测试是什么 性能测试和功能测试之间的区别 为什么要进行性能测试 常见的性能指标及性能测试专业术语 性能测试分类 1. 常见的性能问题 系统内部以及软件的代码实现: 资源泄漏,包括内存泄漏。CPU使用率达到100%,系统被锁定…

Vue3组件通信

1、props 1.1 父传子 父组件:通过属性在子组件标签传递 子组件:通过defineProps接收 1.2 子传父 1.父组件先给子组件传递一个函数 2.子组件接收此参数(函数),并在合适的时机调用此函数,通过函数的参数&…

SEO之网站结构优化(四)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 4、清晰导航 清晰的导航系统是网站设计的重要目标,对网站信息架构、用户体验影响重大。SEO也越来…

Hadoop高可用集群搭建及API调用

NameNode HA 背景 在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNode,但是它并不是NameNode的备份,它只是NameNode的一个助理,协助NameNode工作,SecorndaryNameNode会对fsimage和edits文…