Vue2学习第三天

Vue2 学习第三天

1. 计算属性 computed

  • 计算属性实现

    1. 定义:要用的属性不存在,要通过已有属性计算得来。

    2. 原理:底层借助了Objcet.defineproperty方法提供的gettersetter

    3. get函数什么时候执行?

      • 初次读取时会执行一次。
      • 当依赖的数据发生改变时会被再次调用。
    4. 优势:与 methods 实现相比,内部有缓存机制(复用),效率更高,调试方便。

<template><div><div>count:{{ count }}</div><div>num:{{ num }}</div><div>computed:{{ doubleCount }}</div><div>methods:{{ numDouble() }}</div><button @click="num++">num++</button><button @click="count++">count++</button></div>
</template><script>
export default {/*** 1.可以根据你data当中的值进行计算* 2.可以实现数据缓存* 3.计算属性必须依赖响应式数据*/name: "Computed",data() {return {count: 10,num: 12,};},computed: {// 只有依赖的数据发生变化,才执行doubleCount() {console.log("计算了");return this.count * 2;},},methods: {// num当中只要数据发生变化,methods就执行numDouble() {console.log("methods执行了");return this.num * 2;},},
};
</script><style scoped></style>

QQ录屏20240215111857 -original-original

  • 计算属性总结

    1. 可以根据你 data 当中的值进行计算
    2. 可以实现数据缓存
    3. 计算属性必须依赖响应式数据
  • 计算属性最终会出现在 vm 上,直接读取使用即可。

  • 如果计算属性要被修改,那必须写set 函数去响应修改,且set中要引起计算时依赖的数据发生改变。

2. 监视属性 watch

  • 监视属性

    1. 当被监视的属性变化时, 回调函数自动调用, 进行相关操作
    2. 监视的属性必须存在,才能进行监视!
    3. 监视的两种写法:
      • new Vue 时传入watch配置
      • 通过vm.$watch**监视
  • 天气案例

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>天气案例</title><!-- 引入Vue --><script type="text/javascript" src="../js/vue.js"></script></head><body><!-- 准备好一个容器--><div id="root"><h2>今天天气很{{info}}</h2><!-- 绑定事件的时候:@xxx="yyy" yyy可以写一些简单的语句 --><!-- <button @click="isHot = !isHot">切换天气</button> --><button @click="changeWeather">切换天气</button></div></body><script type="text/javascript">Vue.config.productionTip = false; //阻止 vue 在启动时生成生产提示。const vm = new Vue({el: "#root",data: {isHot: true,},computed: {info() {return this.isHot ? "炎热" : "凉爽";},},methods: {changeWeather() {this.isHot = !this.isHot;},},});</script>
</html>

QQ录屏20240215112541 -original-original

  • 深度监视
<template><div><input type="text" v-model="value" /><button @click="changeObj">监听obj</button></div>
</template><script>
export default {name: "Watch",data() {return {value: "",msg: {name: "123",obj: {name: "abc",},},};},// watch用于监听data中数据的变化,里面可以写任何逻辑watch: {value(newValue, oldValue) {console.log(newValue, oldValue);},msg: {handler(newValue, oldValue) {console.log(JSON.stringify(this.msg));},},// immediate立即监听immediate: true,// deep深度监听,对于嵌套层次深的对象,会一直监听到最下面deep: true,},methods: {changeObj() {this.msg = {name: "123",obj: {name: "abc",a: {b: "214",},},};},},
};
</script><style scoped></style>

QQ录屏20240215112758 -original-original

  • 监视属性简写
<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>天气案例_监视属性_简写</title><!-- 引入Vue --><script type="text/javascript" src="../js/vue.js"></script></head><body><!-- 准备好一个容器--><div id="root"><h2>今天天气很{{info}}</h2><button @click="changeWeather">切换天气</button></div></body><script type="text/javascript">Vue.config.productionTip = false; //阻止 vue 在启动时生成生产提示。const vm = new Vue({el: "#root",data: {isHot: true,},computed: {info() {return this.isHot ? "炎热" : "凉爽";},},methods: {changeWeather() {this.isHot = !this.isHot;},},watch: {//正常写法/* isHot:{// immediate:true, //初始化时让handler调用一下// deep:true,//深度监视handler(newValue,oldValue){console.log('isHot被修改了',newValue,oldValue)}}, *///简写/* isHot(newValue,oldValue){console.log('isHot被修改了',newValue,oldValue,this)} */},});//正常写法/* vm.$watch('isHot',{immediate:true, //初始化时让handler调用一下deep:true,//深度监视handler(newValue,oldValue){console.log('isHot被修改了',newValue,oldValue)}}) *///简写/* vm.$watch('isHot',(newValue,oldValue)=>{console.log('isHot被修改了',newValue,oldValue,this)}) */</script>
</html>
  • watch 实现姓名案例

    • computedwatch之间的区别:
      • computed 能完成的功能,watch 都可以完成。
  • watch 能完成的功能,computed 不一定能完成,例如:watch 可以进行异步操作

  • 两个重要的小原则:

    • 所被 Vue 管理的函数,最好写成普通函数,这样 this 的指向才是 vm 或 组件实例对象。

    • 所有不被 Vue 所管理的函数(定时器的回调函数、ajax 的回调函数等、Promise 的回调函数),最好写成箭头函数,这样 this 的指向才是 vm 或 组件实例对象。

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>姓名案例_watch实现</title><!-- 引入Vue --><script type="text/javascript" src="../js/vue.js"></script></head><body><!-- 准备好一个容器--><div id="root">姓:<input type="text" v-model="firstName" /> <br /><br />名:<input type="text" v-model="lastName" /> <br /><br />全名:<span>{{fullName}}</span> <br /><br /></div></body><script type="text/javascript">Vue.config.productionTip = false; //阻止 vue 在启动时生成生产提示。const vm = new Vue({el: "#root",data: {firstName: "张",lastName: "三",fullName: "张-三",},watch: {firstName(val) {setTimeout(() => {// console.log(this);this.fullName = val + "-" + this.lastName;}, 1000);},lastName(val) {this.fullName = this.firstName + "-" + val;},},});</script>
</html>

QQ录屏20240215113129 -original-original

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端JS按钮点击事件、跳出弹窗、遮罩的实战示例

前端JS 按钮事件、弹窗、遮罩实战示例 文章目录 前端JS 按钮事件、弹窗、遮罩实战示例一、开始二、功能实现三、具体代码如下1、运行结果2、具体代码如下 四、功能解析1、index.html2、button.css3、server.js 一、开始 各位未来的开发者请上座&#xff0c;闲暇的时候发现&…

ViT: transformer在图像领域的应用

文章目录 1. 概要2. 方法3. 实验3.1 Compare with SOTA3.2 PRE-TRAINING DATA REQUIREMENTS3.3 SCALING STUDY3.4 自监督学习 4. 总结参考 论文&#xff1a; An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 代码&#xff1a;https://github.com…

读十堂极简人工智能课笔记05_无监督学习

1. 自我改善 1.1. 只有学会了如何学习和改变的人&#xff0c;才称得上是受过教育的人 1.1.1. 卡尔罗杰斯 1.2. 人工智能如果只是学习纯理论的游戏&#xff08;从国际象棋和围棋到电脑游戏&#xff09;&#xff0c;其结果已然可以令人惊叹 1.3. 让大多数机器人玩叠叠乐游戏&…

Python算法题集_将有序数组转换为二叉搜索树

Python算法题集_将有序数组转换为二叉搜索树 题108&#xff1a;将有序数组转换为二叉搜索树1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【极简代码递归】2) 改进版一【多行代码递归】3) 改进版二【极简代码递归传递下标】 4. 最优算法 本文为…

【类与对象 -2】学习类的6个默认成员函数中的构造函数与析构函数

目录 1.类的6个默认成员函数 2.构造函数 2.1概念 2.2特性 3.析构函数 3.1析构函数的概念 3.2特性 1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;…

解锁Spring Boot中的设计模式—05.策略模式:探索【策略模式】的奥秘与应用实践!

1.策略者工厂模式&#xff08;Map版本&#xff09; 1.需求背景 假设有一个销售系统&#xff0c;需要根据不同的促销活动对商品进行打折或者其他形式的优惠。这些促销活动可以是针对不同商品类别的&#xff0c;比如男装、女装等。 2.需求实现 活动策略接口&#xff1a;定义了…

后端学习:Maven模型与Springboot框架

Maven 初识Maven Maven:是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 Maven的作用1.依赖管理2.统一项目结构3.项目构建依赖管理&#xff1a;方便快捷的管理项目依赖的资源(jar包)&#xff0c;避免版本冲突问题   当使用maven进行项目依赖…

【教学类-19-10】20240214《ABAB式-规律黏贴18格-手工纸15*15CM-一页3种图案,AB一组样板,纵向、有边框》(中班)

背景需求 利用15*15CM手工纸制作AB色块手环&#xff08;手工纸自带色彩&#xff09;&#xff0c;一页3个图案&#xff0c;2条为一组&#xff0c;画图案&#xff0c;黏贴成一个手环。 素材准备 代码展示 # # 作者&#xff1a;阿夏 # 时间&#xff1a;2024年2月14日 # 名称&…

19-k8s的附加组件-coreDNS组件

一、概念 coreDNS组件&#xff1a;就是将svc资源的名称解析成ClusterIP&#xff1b; kubeadm部署的k8s集群自带coreDNS组件&#xff0c;二进制部署需要自己手动部署&#xff1b; [rootk8s231 ~]# kubectl get pods -o wide -A k8s系统中安装了coreDNS组件后&#xff0c;会有一个…

BuildAdmin - 免费开源可商用!基于 ThinkPHP8 和 Vue3 等流行技术栈打造的商业级后台管理系统

一款包含 PHP 服务端和 Vue 前端代码的 admin 管理系统&#xff0c;实用性很强&#xff0c;推荐给大家。 BuildAdmin 是一个成熟的后台管理系统&#xff0c;后端服务采用 ThinkPHP8 &#xff0c;数据库使用 Mysql&#xff0c;前端部分则使用当前流行的 Vue3 / TypeScript / Vi…

K8s进阶之路-安装部署K8s

参考&#xff1a;&#xff08;部署过程参考的下面红色字体文档链接就可以&#xff0c;步骤很详细&#xff0c;重点部分在下面做了标注&#xff09; 安装部署K8S集群文档&#xff1a; 使用kubeadm方式搭建K8S集群 GitBook 本机&#xff1a; master&#xff1a;10.0.0.13 maste…

Vulnhub靶场 DC-6

目录 一、环境搭建 二、主机发现 三、漏洞复现 1、wpscan工具 2、后台识别 dirsearch 3、爆破密码 4、rce漏洞利用 activity monitor 5、rce写shell 6、新线索 账户 7、提权 8、拿取flag 四、总结 一、环境搭建 Vulnhub靶机下载&#xff1a; 官网地址&#xff1a…