《Vue3学习手记2》
今天主要学习Vue3中的数据监视:
ps: 代码中的注释写的很详细,这样更有利于理解
watch
作用: 监视数据的变化(和Vue2中watch作用一致)
特点: Vue3中的watch只能监视以下四种数据:
- ref创建定义的数据(基本类型、对象类型)
- reactive定义的数据(对象类型)
- 函数返回一个值(getter函数)
- 一个包含上述内容的数组
语法: watch接收三个参数:第一个参数是监视的对象;第二个参数是执行的回调函数(回调函数会收到两个值:新值和旧值);第三个参数是是否进行深度监视或者是否打开页面就监视
下面分情况概述:
情况一:监听ref定义的基本数据及对象数据
<template><div class="app"><!-- <h2>姓名:{{name}}</h2><h2>年龄:{{age}}</h2><button @click="changeName">点击修改姓名</button><button @click="changeAge">点击修改年龄</button> --><!-- ========================================================= --><h2>姓名:{{person.name}}</h2><h2>年龄:{{person.age}}</h2><button @click="changeName">点击修改姓名</button><button @click="changeAge">点击修改年龄</button><button @click="changeperson">点击修改全部信息</button></div>
</template><script lang="ts" setup name="Person">// 知识点一:watch监视// 首先 引入watch// watch监视的是ref定义的基本响应式数据import {ref,watch} from "vue"// 数据// const name=ref("张三")// const age=ref(18)// // 方法// function changeName(){// name.value+="~"// }// function changeAge(){// age.value++// }// watch在vue2是配置项,在vue3中是函数。// 对name进行监视// watch(name,(newValue,oldValue)=>{// console.log("name改变了",newValue,oldValue)// })// =========================================================// 知识点二:watch监视的是ref定义的对象数据const person=ref({name:"张三",age:18})function changeName(){person.value.name+="~"}function changeAge(){person.value.age++}function changeperson(){person.value={name:"李四",age:19}}// 对person进行监视,此时只能监视到整个person的变化,而不能检测到person里属性的变化// watch(person,(newValue,oldValue)=>{// console.log("person改变了",newValue,oldValue)// })// 添加第三个参数,可以检测到person中属性name和age的变化watch(person,(newValue,oldValue)=>{console.log("person改变了",newValue,oldValue)},{deep:true,immediate:true})// =========================================================// 注意:// 进行深度监视后,name和age属性可以被监视到。// 监测name和age返回的新值和旧值都是新值,因为他们是同一对象// 监测整个person对象返回的分别是新值和旧值,因为他们不是同一对象,因为整个person都被修改了</script><style>.app {background-color: #ddd;box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}
</style>
情况二: 监视reactive定义的对象数据
<template><div class="app"><h2>姓名:{{person.name}}</h2><h2>年龄:{{person.age}}</h2><button @click="changeName">点击修改姓名</button><button @click="changeAge">点击修改年龄</button><button @click="changeperson">点击修改全部信息</button></div>
</template><script lang="ts" setup name="Person">// 知识点一:watch监视// 首先 引入watch// watch监视的是reactive定义的对象响应式数据import {reactive,watch} from "vue"const person=reactive({name:"张三",age:18})function changeName(){person.name+="~"}function changeAge(){person.age++}function changeperson(){Object.assign(person,{name:"李四",age:20})}// 对person进行监视,此时只能监视到整个person的变化,也能能检测到person里属性的变化(reactive对象数据,默认开启深度监视watch(person,(newValue,oldValue)=>{console.log("person改变了",newValue,oldValue)})// =========================================================// 注意:// 监测name和age返回的新值和旧值(newValue和oldValue)都是新值,因为他们是同一对象// 监测整个person对象返回的newValue和oldValue分别是新值和旧值,因为他们不是同一对象
// ========================================================= //总结: //reactive定义的对象数据和ref相同,都是对象中的属性 返回的新值和旧值都是新值,而整个person对象返回的newValue和oldValue分别是新值和旧值</script><style>.app {background-color: #ddd;box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}
</style>
情况三:(函数返回一个值)监视一个getter函数
常用于监视某个属性
<template><div class="app"><h2>姓名:{{person.name}}</h2><h2>年龄:{{person.age}}</h2><h2>汽车:{{person.car.C1}}-{{ person.car.C2 }}</h2><button @click="changeName">点击修改姓名</button><button @click="changeAge">点击修改年龄</button><button @click="changeC1">点击修改C1</button><button @click="changeC2">点击修改C2</button><button @click="changecar">点击修改汽车</button></div>
</template><script lang="ts" setup name="Person">// 知识点一:watch监视// 首先 引入watch// watch监视:函数返回一个值(getter函数)import {reactive,watch} from "vue"const person=reactive({name:"张三",age:18,car:{C1:"柯尼塞格",C2:"布加迪威龙"}})function changeName(){person.name+="~"}function changeAge(){person.age++}function changeC1(){person.car.C1="奥迪"}function changeC2(){person.car.C2="大众"}function changecar(){person.car={C1:"特斯拉",C2:"小米"} //这里注意,由于car也是一个对象,所以不用用Object assign来定义}// =========================================================// 要求一:只对name属性进行监视 此时需要写成getter函数(watch可以检测到getter函数),判断该属性是不是对象类型,不是对象类型,应写成函数式// watch(()=>{return person.name},(newValue,oldValue)=>{// 可简写为:watch(()=>person.name,(newValue,oldValue)=>{console.log("name改变了",newValue,oldValue)})//要求二:只对car属性进行监视 判断该属性是不是对象类型,是对象类型,应写成函数式(推荐),也可以直接写watch(()=>person.car,(newValue,oldValue)=>{console.log("car改变了",newValue,oldValue)},{deep:true})// =========================================================// 总结:监视的是对象里的属性(注意:首先要满足是对象,不管是对象里的基本数据还是对象数据类型),最好都写成函数式,注意点:若是也需要监视对象内部,则需手动开启深度监视。</script><style>.app {background-color: #ddd;box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}
</style>
情况四:监视多个数据(包含上述内容的数组)
<template><div class="app"><h2>姓名:{{person.name}}</h2><h2>年龄:{{person.age}}</h2><h2>汽车:{{person.car.C1}}-{{ person.car.C2 }}</h2><button @click="changeName">点击修改姓名</button><button @click="changeAge">点击修改年龄</button><button @click="changeC1">点击修改C1</button><button @click="changeC2">点击修改C2</button><button @click="changecar">点击修改汽车</button></div>
</template><script lang="ts" setup name="Person">// 知识点一:watch监视// 首先 引入watch// watch监视:监视上述内容的数组(多个数据)import {reactive,watch} from "vue"const person=reactive({name:"张三",age:18,car:{C1:"柯尼塞格",C2:"布加迪威龙"}})function changeName(){person.name+="~"}function changeAge(){person.age++}function changeC1(){person.car.C1="奥迪"}function changeC2(){person.car.C2="大众"}function changecar(){person.car={C1:"特斯拉",C2:"小米"} //这里注意,由于car也是一个对象,所以不用用Object assign来定义}// =========================================================// 对name属性和car对象里面的C1属性进行监视 watch([()=>person.name,()=>person.car.C1],(newValue,oldValue)=>{console.log("name和car被修改了",newValue,oldValue)},{deep:true})// 此时newValue返回的是name和car.C1返回的新值组成的数组
</script><style>.app {background-color: #ddd;box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}
</style>
watchEffect
watch对比watchEffect
1.都能监听响应式数据的变化,不同的是监听数据变化的方式不同
2. watch:要明确指出监视的数据,当需要监视的数据过多时,操作麻烦
3.watchEffect:不用明确指出监视的数据(函数中用到哪些属性,那就监视哪些属性),它会自己分析。
<template><div class="app"><h2>水温:{{temp}}</h2><h2>水位:{{height}}</h2><button @click="changeTemp">点击水温+10</button><button @click="changeHeight">点击水位+10</button></div>
</template><script lang="ts" setup name="Person">// 知识点:watchEffect监视// 首先 引入watchEffectimport {ref,watch,watchEffect} from "vue"const temp=ref(0)const height=ref(10)function changeTemp(){temp.value+=10}function changeHeight(){height.value+=10}
// 要求:当水温大于60或水位大于80,向服务器发送请求
// 对水温和水位进行监视 (不是对象里的属性,可直接写)// =========================================================// 第一种写法:// watch([temp,height],()=>{ //value表示newValue,返回的是newTemp和newHeight组成的数组// // 解构// // const [newTemp,newHeight]=value// // 进行判断// if(temp.value>60 || height.value>80){// console.log("向服务器发送请求")// }// })// 第二种写法:// watch([temp,height],(value)=>{ //value表示newValue,返回的是temp和height的新值组成的数组// // 进行判断// if(value[0]>60 || value[1]>80){// console.log("向服务器发送请求")// }// })// 第三种写法:// watch([temp,height],(value)=>{ //value表示newValue,返回的是newTemp和newHeight组成的数组// // 解构// const [newTemp,newHeight]=value// // 进行判断// if(newTemp>60 || newHeight>80){// console.log("向服务器发送请求")// }// })// =========================================================// 使用watchEffect写:(直接使用,watchEffect会自己分析),适用于监视的对象足够多的情况watchEffect(()=>{if(temp.value>60 || height.value>80){console.log("向服务器发送请求")}})
</script><style>.app {background-color: #ddd;box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}
</style>
相关文章:
《Vue3学习手记2》
今天主要学习Vue3中的数据监视: ps: 代码中的注释写的很详细,这样更有利于理解 watch 作用: 监视数据的变化(和Vue2中watch作用一致) 特点: Vue3中的watch只能监视以下四种数据: ref创建定义的数据(基本类型、对象类型)reactiv…...
zigbee和wifi都是无线通信,最大区别是低功耗,远距离!
zigbee和wifi都属于短距离无线通信技术,都使用了2.4GHz的无线频段,并采用了直接序列扩频传输技术(DSSS)。并广泛应用于人们的生产生活之中。但是,它们之间却存在很大区别。 1、传输速率不同 ①、zigbee传输速率 zigb…...
JavaWeb开发 Servlet底层 Servlet 过滤器 过滤器和拦截器 手写一个限制访问路径的拦截器
目录 万能图 过滤器自我理解 案例 实现Filter 接口 配置文件 web.xml 将过滤器映射到 servlet 用处 拦截器 手写案例 重写 preHandle() 方法 拦截处理 重写 postHandle() 方法 后处理 重写 afterHandle() 方法 完成处理 代码 如何配置拦截器 万能图 还是看一下这张…...
Zookeeper三台服务器三节点集群部署(docker-compose方式)
1. 准备工作 - 服务器:3 台服务器,IP 地址分别为 `10.10.10.11`、`10.10.10.12`、`10.10.10.13`。 - 安装 Docker:确保每台服务器已安装 Docker 和 Docker Compose。 - 网络通信:确保三台服务器之间可以通过 IP 地址互相访问,并开放以下端口: - `2181`:Zookeeper 客户…...
从北京到大同,走过600里,跨越1000年。
人们都说,在中国,地下文物看陕西,地上文物看山西,因此在一个月之前就想来山西走一走,看一看,感受一下我泱泱大国的中华千年的历史积淀。 1、出发前的小花絮 于是,就在清明车票开卖的一瞬间&…...
鸿蒙NEXT开发全局上下文管理类(ArkTs)
type CacheValue string | number | boolean | object;/*** 全局上下文管理类,用于存储和管理全局数据。* author: 鸿蒙布道师* since: 2025/04/15*/ export class GlobalContext {private static instance: GlobalContext;private _objects new Map<string, C…...
【论文阅读】Orion: Online Backdoor Sample Detection via Evolution Deviance
摘要 现有的后门输入检测策略依赖于一个假设,即正常样本和被投毒样本在模型的特征表示中是可分离的。然而,这一假设可能会被先进的特征隐藏型后门攻击打破。在本文中,我们提出了一种新颖的检测框架,称为Orion(通过进化…...
Redis之缓存雪崩
Redis之缓存雪崩 文章目录 Redis之缓存雪崩一、什么是缓存雪崩1. 定义2.核心原因① 缓存集中过期② 缓存服务故障③ 资源竞争或流量激增 3. 影响 二、缓存雪崩常见解决方案1. 分散缓存过期时间2. 多级缓存架构3. 缓存高可用设计4. 熔断与降级机制5. 缓存预热6. …...
【HarmonyOS 5】AttributeModifier和AttributeUpdater详解
【HarmonyOS 5】AttributeModifier和AttributeUpdater区别详解 一、AttributeModifier和AttributeUpdater的定义和作用 1. AttributeModifier是ArkUI组件的动态属性,提供属性设置功能。开发者可使用attributeModifier方法,通过自定义实现AttributeModi…...
C# + Python混合开发实战:优势互补构建高效应用
文章目录 前言🥏一、典型应用场景1. 桌面应用智能化2. 服务端性能优化3. 自动化运维工具 二、四大技术实现方案方案1:进程调用(推荐指数:★★★★☆)方案2:嵌入Python解释器(推荐指数࿱…...
鸿蒙开发中,@Extend、@Styles 和 @Builder 的区别
在鸿蒙(HarmonyOS)开发中,Extend、Styles 和 Builder 是三种常用的装饰器,用于提升代码复用性和可维护性。以下是它们的详细介绍和示例: 1. Extend:扩展组件样式 说明: 功能:用于…...
poll为什么使用poll_list链表结构而不是数组 - 深入内核源码分析
一:引言 在Linux内核中,poll机制是一个非常重要的I/O多路复用机制。它允许进程监视多个文件描述符,等待其中任何一个进入就绪状态。poll的内部实现使用了poll_list链表结构而不是数组,这个设计选择背后有其深层的技术考量。本文将从内核源码层面深入分析这个设计决…...
从健康干预到成本优化:健康管理系统如何驱动企业降本增效?
在全球经济竞争日益激烈的背景下,企业正面临劳动力成本上升、员工健康问题频发、医疗支出居高不下等多重挑战,在当今商业环境中,企业的降本增效至关重要,而员工的健康状况是影响企业成本和效率的关键因素之一。健康管理系统作为一…...
12【模块学习】DS18B20(二):高级使用
DS18B20 1、改变采样分辨率2、总线上有多个设备的使用2.1、获取总线上单个设备的ROM码2.2、通过匹配ROM指令使用总线上多个设备 3、项目:4路温度检测LCD显示 1、改变采样分辨率 需要改变采样的分辨率,则需要向暂存器的配置寄存器中写入配置参数。在向寄…...
NLP高频面试题(四十三)——什么是人类偏好对齐中的「对齐税」(Alignment Tax)?如何缓解?
一、什么是「对齐税」(Alignment Tax)? 所谓「对齐税」(Alignment Tax),指的是在使人工智能系统符合人类偏好的过程中,所不可避免付出的性能损失或代价。换句话说,当我们迫使AI遵循人类价值观和规范时,AI系统往往无法达到其最大理论性能。这种性能上的妥协和折衷,就…...
线代第二章矩阵第一课:矩阵的概念
一、矩阵的概念 矩阵 i还是表示的是行,j表示的是列;行数未必等于列数 同型矩阵: A,B行数相等,列数相等 矩阵相等: 同型矩阵,且对应元素相等 零矩阵: 所有元素均为0 二、特殊矩阵 方阵 行数…...
如何获取Google Chrome的官方最新下载链接【获取教程】
一、为什么选择官方下载链接 安装谷歌浏览器的最安全方式始终是通过其官方网站。非官方渠道可能存在版本落后、功能缺失,甚至潜藏恶意插件等风险。因此,获取Google Chrome的官方最新下载链接,是保障浏览器安全与性能的重要前提。 此外&…...
软件测试——BUG概念
一、软件测试生命周期 软件测试贯穿于软件的整个生命周期 软件测试的生命周期指测试流程,每个阶段有不同的目标和交付产物 需求分析 从用户角度考虑软件需求是否合理 从技术角度考虑技术上是否可行,是否有优化空间 从测试角度考虑是否存在业务逻辑错误…...
Docker安装 (centos)
1.安装依赖包: sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2.删除已有的 Docker 仓库文件(如果有): sudo rm -f /etc/yum.repos.d/docker-ce.repo 3.添加阿里云的 Docker 仓库: sudo yum…...
MySQL数据库 - 存储引擎
存储引擎 此笔记参考黑马教程,仅学习使用,如有侵权,联系必删 文章目录 存储引擎1. MySQL 体系结构2. 存储引擎简介2.1 语法代码演示 3. 存储引擎特点InnoDB介绍特点文件逻辑存储结构 MyISAM介绍特点文件 Memory介绍特点文件 总结 4. 存储引擎…...
【网络篇】UDP协议的封装分用全过程
大家好呀 我是浪前 今天讲解的是网络篇的第二章:UDP协议的封装分用 我们的协议最开始是OSI七层网络协议 这个OSI 七层网络协议 是计算机的大佬写的,但是这个协议一共有七层,太多了太麻烦了,于是我们就把这个七层网络协议就简化为…...
数据结构——布隆过滤器
目录 一、什么是布隆过滤器? 二、布隆过滤器的原理 三、布隆过滤器的特点 一、什么是布隆过滤器? 布隆过滤器是一种空间效率高、适合快速检索的数据结构,用于判断一个元素是否可能存在于一个集合中。它通过使用多个哈希函数和一个位数组来…...
pytorch实现逻辑回归
pytorch实现逻辑回归 数据准备,参数初始化前向计算计算损失计算梯度更新参数 在官网上找到线性函数的公式表达式 import torch from sklearn.datasets import load_iris # from sklearn.model_selection import train_test_split #train_test_split是sklearn中的…...
03-Spring Cloud Gateway 深度解析:从核心原理到生产级网关实践
Spring Cloud Gateway 深度解析:从核心原理到生产级网关实践 一、网关技术演进与 Spring Cloud Gateway 定位 1. 微服务网关的核心价值 作为微服务架构的流量入口,网关承担着 路由转发、流量治理、安全防护 三大核心职能: 统一接入&#…...
Spark-sql编程
创建子模块并添加依赖 在IDEA中创建一个名为Spark-SQL的子模块。 在该子模块的pom.xml文件中添加Spark-SQL的依赖,具体依赖为org.apache.spark:spark-sql_2.12:3.0.0。 编写Spark-SQL测试代码 定义一个User case class,用于表示用户信息…...
K8s 生产落地
深夜收到报警短信,集群突然宕机——这可能是每个运维人最不愿面对的噩梦。生产级Kubernetes集群的部署,远不是几条命令就能搞定的事情。本文将结合真实踩坑经验,从零拆解一个高可用、高安全、可自愈的Kubernetes生产环境该如何落地。 一、架…...
SnailJob:分布式环境设计的任务调度与重试平台!
背景 近日挖掘到一款名为“SnailJob”的分布式重试开源项目,它旨在解决微服务架构中常见的重试问题。在微服务大行其道的今天,我们经常需要对某个数据请求进行多次尝试。然而,当遇到网络不稳定、外部服务更新或下游服务负载过高等情况时,请求…...
通过WebRTC源码入门OpenGL ES
文章目录 基本概念Vertex和Fragment着色器程序 准备工作getUniformLocation/getAttribLocationglVertexAttribPointer 开始绘制Demo实现 OpenGL SE是一套适用于嵌入式设备的图形API,本文主要介绍如何通过OpenGL SE在Android设备上进行图形绘制,同时我会通…...
面试题:请描述一下你在项目中是如何进行性能优化的?针对哪些方面进行了优化,采取了哪些具体的措施?
目录 1.算法和数据结构优化 2.内存管理优化 3.并发编程优化 4.数据库优化 5.网络优化 6.持续优化与监控 7.总结 现在是企业招聘和求职者的金三银四,每每问到这个主观性问题的时候,都不知道怎么回答,下面就我知道的一些总结一下&#x…...
从零实现富文本编辑器#2-基于MVC模式的编辑器架构设计
在先前的规划中我们是需要实现MVC架构的编辑器,将应用程序分为控制器、模型、视图三个核心组件,通过控制器执行命令时会修改当前的数据模型,进而表现到视图的渲染上。简单来说就是构建一个描述文档结构与内容的数据模型,并且使用自…...
SAP S4HANA embedded analytics
SAP S4HANA embedded analytics...
linux多线(进)程编程——(7)消息队列
前言 现在修真界大家的沟通手段已经越来越丰富了,有了匿名管道,命名管道,共享内存等多种方式。但是随着深入使用人们逐渐发现了这些传音术的局限性。 匿名管道:只能在有血缘关系的修真者(进程)间使用&…...
STM32 HAL库 实现485通信
一、引言 在工业自动化、智能家居等众多领域中,RS - 485 通信因其长距离、高抗干扰能力等优点被广泛应用。STM32F407 是一款性能强大的微控制器,其丰富的外设资源为实现 RS - 485 通信提供了良好的硬件基础。本文将详细介绍基于 STM32F407 HAL 库实现 R…...
用 Vue 3 + OpenAI API 实现一个智能对话助手(支持上下文、多角色)
文章目录 一、项目背景与功能介绍二、技术选型与准备工作环境准备 三、智能对话助手的实现第一节:封装 OpenAI 接口请求第二节:构建消息上下文结构第三节:构建对话 UI 组件第四节:滚动自动到底部(可选优化)…...
ollama修改配置使用多GPU,使用EvalScope进行模型压力测试,查看使用负载均衡前后的性能区别
文章目录 省流结论机器配置不同量化模型占用显存1. 创建虚拟环境2. 创建测试jsonl文件3. 新建测试脚本3. 默认加载方式,单卡运行模型3.1 7b模型输出213 tok/s3.1 32b模型输出81 tok/s3.1 70b模型输出43tok/s 4. 使用负载均衡,多卡运行4.1 7b模型输出217t…...
vue3 setup vite 配置跨域了proxy,部署正式环境的替换
在开发环境中使用 Vite 的 proxy 配置来解决跨域问题是一种常见的做法。然而,在部署到正式环境时,通常需要对接口地址进行调整,具体是否需要更改接口名称取决于你的部署环境和后端服务的配置。以下是几种常见的情况和建议: 1. 正…...
目标检测:YOLOv11(Ultralytics)环境配置
1、前言 YOLO11是Ultralytics公司YOLO系列实时目标检测器的最新迭代版本,它以尖端的准确性、速度和效率重新定义了可能实现的性能。在之前YOLO版本取得的显著进步基础上,YOLO11在架构和训练方法上进行了重大改进,使其成为各种计算机视觉任务中…...
如何高效压缩GIF动图?
GIF动图因其兼容性强、易于传播的特点,成为网络交流的热门选择。然而,过大的文件体积常常导致加载缓慢、分享困难等问题。本文将为您详细介绍几种实用的GIF压缩技巧,帮助您在保持画面质量的同时显著减小文件大小。 压缩方法 1. 在线压缩工具…...
视频融合平台EasyCVR可视化AI+视频管理系统,打造轧钢厂智慧安全管理体系
一、背景分析 在轧钢厂,打包机负责线材打包,操作人员需频繁进入内部添加护垫、整理包装、检修调试等。例如,每班产线超过300件,12小时内人员进出打包机区域超过300次。若员工安全意识薄弱、违规操作,未落实安全措施就…...
通过命令行操作把 本地IDE 项目上传到 GitHub(小白快速版)
通过命令行操作把 本地IDE 项目上传到 GitHub(小白版) 你是不是在用 本地IDE 做项目,但不知道怎么把自己的代码上传到 GitHub?今天我们用最简单的命令行方式(不用 SSH、不用复杂配置)教你一步一步把本地项…...
【c语言基础学习】qsort快速排序函数介绍与使用
在C语言中,qsort 函数用于对数组进行快速排序。以下是详细的使用方法及示例: 一、函数原型 #include <stdlib.h>void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) );二、参数说明 参数说明base指向…...
今日github AI科技工具汇总(20250415更新)
以下是2025年4月15日GitHub上值得关注的AI科技工具汇总及趋势分析,结合最新开源动态与开发者社区热点整理: 一、AI编程工具重大更新 GitHub Copilot Agent Mode 全量发布 核心功能:在VS Code中启用后,可自主完成多文件代码重构、测试驱动开发(TDD)及自修复编译错误,支持…...
程序化广告行业(88/89):广告创意审核的法律红线与平台规则
程序化广告行业(88/89):广告创意审核的法律红线与平台规则 在程序化广告的广阔领域中,不断学习和掌握行业规范是我们稳步前行的基石。一直以来,我都期望与大家携手共进,深入探索这个行业的奥秘。今天&…...
前端VUE框架理论与应用(4)
一、计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如: <div id="example">{{ message.split().reverse().join() }}</div> 在这个地方,模板不再是简单的声明式逻辑。你…...
【经验分享】基于Calcite+MyBatis实现多数据库SQL自动适配:从原理到生产实践
基于CalciteMyBatis实现多数据库SQL自动适配:从原理到生产实践 一、引言:多数据库适配的行业痛点 在当今企业IT环境中,数据库异构性已成为常态。根据DB-Engines最新调研,超过78%的企业同时使用两种以上数据库系统。这种多样性带…...
通信算法之265: 无人机系统中的C2链路
在无人机系统设计中,我们经常听到C2链路这个名词,到底什么是C2链路呢?为什么说C2链路是无人机系统中非常重要的环节。 转载: 无人机技术是各种科技技术水平综合发展的结果,包括空气动力,机械设计…...
浙江大学:DeepSeek如何引领智慧医疗的革新之路?|48页PPT下载方法
导 读INTRODUCTION 随着人工智能技术的飞速发展,DeepSeek等大模型正在引领医疗行业进入一个全新的智慧医疗时代。这些先进的技术不仅正在改变医疗服务的提供方式,还在提高医疗质量和效率方面展现出巨大潜力。 想象一下,当你走进医院ÿ…...
Codeforces Round 1017 (Div. 4)
Codeforces Round 1017 (Div. 4) A. Trippi Troppi AC code: void solve() { string a, b, c; cin >> a >> b >> c;cout << a[0] << b[0] << c[0] << endl; } B. Bobritto Bandito 思路: 倒推模拟即可,…...
bash的特性-bash中的引号
在Linux或Unix系统中,Bash(Bourne Again SHell)作为最常用的命令行解释器之一,提供了强大的功能来处理各种任务。正确使用引号是掌握Bash脚本编写的基础技能之一,它决定了如何解析字符串、变量替换以及特殊字符的行为。…...
ubuntu上SSH防止暴力破解帐号密码
在知道设备ip的情况下,使用 Fail2Ban防止暴力破解 sudo apt install fail2ban 配置 SSH 防护规则 sudo gedit /etc/fail2ban/jail.local jail.local内容如下: [sshd] enabled true port ssh logpath /var/log/auth.log # Ubuntu/Debian maxret…...