当前位置: 首页 > news >正文

Vue day02 Computed和Watch

1.事件绑定
可以用 v-on 指令监听DOM 事件,并在触发时运行一些 JavaScript 代码。v-on 还可以接收一个需要调用的方法名称。
<button v-on:click="handler">good</button>
methods: {
handler: function (event) {
if (event) { alert(event.target.tagName) } // event 是原生 DOM 事件
}
}
除了直接绑定到一个方法,也可以在内联 JavaScript 语句中调用方法,通过$event传递原生事件对象:
<button v-on:click="say('hi',$event)">Say hi</button>
methods: { say: function (message,event) { alert(message) } }
由于事件绑定在vue中使用概率较大,所以这里提供了简写形式
<button @click=“say(‘hi’,$event)”>Say hi

事件参数
在事件调用时,可以进行参数的传递 :
### html代码
<div id="app"><el-button @click="toAdd" type="primary" size="small">新增</el-button><div><el-table type="index" size="small" :data="tableData" style="width: 50%"><el-table-column  prop="date" label="日期" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址"></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-button size="small" @click="toEdit(scope.row)" type="primary">编辑</el-button><el-button size="small" type="danger" @click="toDelete(scope.row.id)">删除</el-button></template></el-table-column></el-table></div><el-dialog :title="title" :visible.sync="dialogFormVisible"><el-form :model="form"><el-form-item  label="时间" :label-width="formLabelWidth"><el-input v-model="form.date" autocomplete="off"></el-input></el-form-item><el-form-item label="姓名" :label-width="formLabelWidth"><el-input v-model="form.name" autocomplete="off"></el-input></el-form-item><el-form-item label="地址" :label-width="formLabelWidth"><el-input v-model="form.address" autocomplete="off"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible = false">取 消</el-button><el-button type="primary" @click="dialogFormVisible = false">确 定</el-button></div></el-dialog></div>
### js代码
<script>new Vue({el: "#app",data: {dialogFormVisible: false,formLabelWidth: "120px",form: {},title: '',tableData: [{id: 1,date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'}, {id: 2,date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄'}, {id: 3,date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄'}, {id: 4,date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄'}]},methods: {toAdd() {this.dialogFormVisible = true;this.form = {};this.title = '新增数据'},toEdit(row) {this.form = { ...row };this.dialogFormVisible = true;this.title = '修改数据';},toDelete(id) {this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {this.tableData.splice(id,1)this.$message({type: 'success',message: '删除成功!'});}).catch(() => {this.$message({type: 'info',message: '已取消删除'});});}}})</script>

进行事件绑定时,可以将v-on:事件名缩写为**@事件名**,此方式经常使用 :

事件修饰符

事件修饰符
在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。Vue提供了更好的方式:事件处理函数只有纯粹的数据逻辑,而不是去处理 DOM 事件细节,通过事件修饰符来完成这些细节。

<button v-on:click.prevent="handler">点我点我</button>

常见修饰符如下
.stop 停止事件冒泡
.prevent 阻止事件默认行为
.capture 在事件捕获阶段执行事件处理函数
.self 只当在 event.target 是当前元素自身时触发处理函数
.once 事件处理函数执行一次后解绑
.passive 滚动事件的默认行为 (即滚动行为) 将会立即触发 ,一般与scroll连用,能够提升移动端的性能
按键修饰符
一般与keyup事件类型配合使用
.enter、.tab、.delete、.esc、.space、.up、.down、.left、.right
.ctrl、.alt、.shift、.meta
鼠标修饰符mouseup事件
.left、.right、.middle

### js代码
new Vue({el: "#app",data: {msg: '事件修饰符'},methods: {keyupHandle() {console.log('按下某些特殊键');},toJump() {console.log('跳转');alert(1);},outer(e) {// e.target是触发事件的源头元素,目标元素// e.currentTarget 当前执行事件处理程序的元素,当前目标元素// console.log('outer', e.target, e.currentTarget);console.log('outer')for (let i = 0; i < 100; i++) {console.log(i);}},inner(e) {// e.stopPropagation();// console.log('inner', e.target, e.currentTarget);console.log('inner');}}})
### html代码
<div id="app"><!-- <input type="text" @keyup.enter="keyupHandle"> --><input type="text" @keyup.13="keyupHandle"><!-- <input type="text" @mouseup.left="keyupHandle"> -->{{msg}}<a @click.prevent="toJump" href="http://www.baidu.com">百度一下</a><!-- 点击inner   event.target   --><!-- <div class="outer" @click.self.once="outer"> --><!-- <div class="outer" @click.self="outer"> --><!-- <div class="outer" @click.capture="outer"> --><div class="outer" @scroll.passive="outer">outer<div class="inner" @click="inner"><!-- <div class="inner" @click.stop="inner"> -->inner</div></div></div>

表单

可以用 v-model 指令在表单 <input><textarea><select>元素上创建双向数据绑定。 它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。使用v-model绑定了值, 那么name属性就可以不用写了。

### html代码
<div id="app">{{msg}}<br>{{stu}}<br><!-- 用户名:<input type="text" v-model.lazy="stu.username"> -->用户名:<input type="text" v-model.trim="stu.username"><br><!-- .number修饰符,可以将采集到的数据转为number类型,然后再存储到数据模型中 -->年龄:<input type="text" v-model.number="stu.age"><br><!-- 性别 -->性别:<input type="radio" value="male" v-model="stu.gender"><input type="radio" value="female" v-model="stu.gender"><br><!-- 爱好 -->爱好:<input type="checkbox" value="basketball" v-model="stu.hobby">篮球<input type="checkbox" value="swimming" v-model="stu.hobby">游泳<input type="checkbox" value="dancing" v-model="stu.hobby">跳舞<br><!-- 城市 -->城市:<!-- <select multiple v-model="stu.city"> --><select v-model="stu.city"><option value="shanghai">上海</option><option value="beijing">北京</option><option value="guangzhou">广州</option></select><br><!-- 简介 -->简介:<textarea v-model="stu.info" cols="30" rows="10"></textarea></div>
### js代码new Vue({el: '#app',data: {msg: 'hello',stu: {// 复选框hobby: []}},methods: {}})

watch(监听器 监听属性)

当需要在数据变化时执行异步或开销较大的操作时,使用监听器是最有用的

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

### html代码
<div id="app">{{msg}}<br>a:<input type="text" v-model.number="a"><br>+<br>b:<input type="text" v-model.number="b"><br>=<br><output>{{total}}</output></div>
### js代码new Vue({el: '#app',data: {msg: 'hello',a: 0,b: 0,total: 0},methods: {},// 监听  侦听watch: {a(newValue, oldValue) {this.total = this.a + this.b;},b(newValue, oldValue) {this.total = this.b + this.a;}}})
### 深度监听
### js代码new Vue({el: '#app',data: {msg: 'hello',a: 1,obj: {name: 'zhangsan',age: 12},},watch: {a(newValue, oldValue) {console.log('a数据发生变化...');},/* obj(newValue, oldValue) {console.log('obj数据发生变化...');} */// 深度监听obj: {handler(newValue, oldValue) {console.log('obj数据发生变化...');},// 深度监听deep: true}},methods: {changeObj() {// 更改内部数据this.obj.name = 'lisi';}}})
### html代码<div id="app">{{msg}}<br>{{obj}}<button @click="changeObj">更改obj</button></div>

computed(计算属性)

计算属性 有依赖关系的数据

我们希望一个变量是经过某种计算然后输出而不是直接输出的时候可以使用到计算属性
计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。而每次调用函数都会导致函数的重新执行。

 ### html代码
<div id="app">{{msg}}<br>a:<input type="text" v-model.number="a"><br>+<br>b:<input type="text" v-model.number="b"><br>=<br>{{total}}</div>	
### js代码new Vue({el: '#app',data: {msg: 'hello',a: 0,b: 0,// total: 0},// 计算属性computed: {total(){console.log('计算属性');// return 111return this.a+this.b}},methods: {}})
面试题
*** watch和computed的区别 computed1. 具有缓存性,页面重新渲染值不变化,计算属性会立即返回之前的计算结果,而不必再次执行函数2.计算属性计算某一个属性得变化,如果某一个值改变了,计算属性会见监听到进行返回watch1. 监听值的变化,执行异步操作【axios请求】’$route.query‘:{this.loadArticle()}2. 无缓存性,只有当当前值发生变化时才会执行/响应
console.log('计算属性');// return 111return this.a+this.b}},methods: {}
})

```javascript
面试题
*** watch和computed的区别 computed1. 具有缓存性,页面重新渲染值不变化,计算属性会立即返回之前的计算结果,而不必再次执行函数2.计算属性计算某一个属性得变化,如果某一个值改变了,计算属性会见监听到进行返回watch1. 监听值的变化,执行异步操作【axios请求】’$route.query‘:{this.loadArticle()}2. 无缓存性,只有当当前值发生变化时才会执行/响应

相关文章:

Vue day02 Computed和Watch

1.事件绑定 可以用 v-on 指令监听DOM 事件&#xff0c;并在触发时运行一些 JavaScript 代码。v-on 还可以接收一个需要调用的方法名称。 <button v-on:click"handler">good</button> methods: { handler: function (event) { if (event) { alert(event.t…...

【Java】一只小菜坤的编程题之旅【3】

文章目录 1丶判定是否互为字符重排2、杨辉三角3丶某公司的1个面试题&#xff08;字符串包含问题&#xff09; 1丶判定是否互为字符重排 这个题我们用一个非常简单的思想就能实现&#xff0c;我们先将字符串转换为字符数组&#xff0c;然后对字符数组进行排序&#xff0c;然后再…...

全面掌握 Jaeger 分布式调用链路跟踪理论和实战,Go 为所有使用 go-resty 库发起 HTTP 请求集成链路跟踪 jaeger(附源码)

全面掌握 Jaeger 分布式调用链路跟踪理论和实战,Go 为所有使用 go-resty 库发起 HTTP 请求集成链路跟踪 jaeger(附源码)。 介绍一个开源的分布式跟踪系统 Jaeger,首先从理论基础知识开始学习,将学习如何在 HTTP 请求中集成链路跟踪,以及如何在 GORM 框架实现,最后学习 …...

vue键盘和鼠标事件

1、键盘事件 **按Enter键** keyup.enter**按PageDown键** keyup.page-down **按Tab键** keyup.tab **按Delete键** keyup.delete **按ESC键** keyup.esc**按Space键** keyup.space **按↑&#xff08;Up&#xff09;键** keyup.up**按↓&#xff08;Down&#xff09;键** keyup…...

Chrome 手动代理设置 HTTP/Socks5

1、安装代理插件&#xff1a;SwitchyOmega 在线安装 从 Chrome 应用商店 安装&#xff0c;如果您无法从该链接安装&#xff0c;请使用下面的离线安装。 离线安装 ①、去 Github 下载 最新版安装包 &#xff0c;或者直接 本地下载 文件进行安装。 ②、下载安装文件后&#xf…...

SpringBoot第35讲:SpringBoot集成连接池 - 默认连接池HikariCP

SpringBoot第35讲&#xff1a;SpringBoot集成连接池 - 默认连接池HikariCP 本文是SpringBoot第35讲&#xff0c;主要介绍数据库连接池&#xff0c;以及SpringBoot集成默认的HikariCP的实践。 文章目录 SpringBoot第35讲&#xff1a;SpringBoot集成连接池 - 默认连接池HikariCP1…...

选择最适合自己的笔记本

选择最适合自己的笔记本电脑 一、了解笔记本品牌一线品牌准一线品牌二线品牌三线品牌 二、笔记本入手渠道笔记本入手渠道 三、根据需求选择机型使用需求1.日常使用2.商务办公、财务3.轻度剪辑、ps4.代码5.创意设计6.游戏 四、笔记本电脑配置如何选1.cpu2.显卡&#xff08;GPU&a…...

前端安全:探秘安全 HTTP 头的设置

在当今数字化时代&#xff0c;前端安全至关重要。除了应对常见的攻击方式外&#xff0c;通过设置安全 HTTP 头&#xff0c;我们可以加强网站的安全性&#xff0c;减少潜在的威胁。本文将为您详细解释什么是安全 HTTP 头&#xff0c;以及如何通过设置它们来保护您的前端应用。 1…...

python爬虫——爬虫伪装和反“反爬”

前言 爬虫伪装和反“反爬”是在爬虫领域中非常重要的话题。伪装可以让你的爬虫看起来更像普通的浏览器或者应用程序&#xff0c;从而减少被服务器封禁的风险&#xff1b;反“反爬”则是应对服务器加强的反爬虫机制。下面将详细介绍一些常见的伪装和反反爬技巧&#xff0c;并提…...

vue3 使用 element-china-area-data 实现地区选择器

官方地址&#xff1a;https://www.npmjs.com/package/element-china-area-data?activeTabreadme 在线示例&#xff1a;https://plortinus.github.io/element-china-area-data/index.html 实际使用 <el-col :span"12"><el-form-item label"所处城市&…...

STM32自带的DSP库的滤波初体验(一)

最近在弄STM32自带的DSP库里的滤波&#xff0c;记录一下&#xff1a; arm_fir_instance_q15 instance_q15_S; #define NUM_TAPS 16 //滤波系数的个数 #define BLOCK_SIZE 32 q15_t firStateF32[BLOCK_SIZE NUM_TAPS]; q15_t Fir_Coeff[NUM_TAPS] {-79, -136, 312, 6…...

go kratos protobuf 接收动态JSON数据

前言 google.protobuf.Struct 是 Google Protocol Buffers 中的一种特殊类型&#xff0c;用于表示动态的键值对数据。它可以存储任意类型的数据&#xff0c;并提供了方便的方法来访问和操作这些数据。 Struct 类型通常用于在不事先知道数据结构的情况下传递和处理配置、参数或其…...

Python学习笔记第五十四天(Pandas DataFrame)

Python学习笔记第五十四天 Pandas 数据结构 - DataFrame使用列表创建使用 ndarrays 创建使用字典创建返回多行数 后记 Pandas 数据结构 - DataFrame DataFrame 是一个表格型的数据结构&#xff0c;它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符…...

Docker镜像查看下载删除镜像文件的相关命令

1.镜像相关命令 本地查看有哪些镜像文件&#xff1a; docker images镜像的名称就是我们常见的一些软件&#xff0c;镜像相当于把软件和软件所需要的运行环境打包到一个镜像文件里面&#xff0c;将来在通过这个镜像文件创建出对应的容器&#xff0c;容器有了以后这些软件自动的…...

1. VisionOS平台介绍

介绍 VisionOS 可实现与现实世界无缝集成并与其他虚拟内容共存的 3D 多任务体验。这为个人生产力、生活方式和娱乐应用打开了一个充满新可能性的世界&#xff0c;并为开发人员打开了一个全新的市场。然而&#xff0c;它也带来了围绕多任务处理和与身体互动的新挑战。Unity Poly…...

【C#】设置有线网卡IP地址,子网掩码,网关,DNS

方法 public partial class ComputerInfo{/// <summary>/// 设置IP地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;DNS/// </summary>public static List<NetworkAdapterInfo> SetIpAddressSubMaskDnsGeteway(string ipAddress, string subMask, stri…...

LVS-DR集群及NGINX负载均衡

LVS-DR集群 原理&#xff1a; 1. 当用户向负载均衡调度器&#xff08;Director Server&#xff09;发起请求&#xff0c;调度器将请求发往至内核空间 2. PREROUTING链首先会接收到用户请求&#xff0c;判断目标IP确定是本机IP&#xff0c;将数据包发往INPUT链 3. IPVS是工作在…...

React如何配置env环境变量

React版本&#xff1a; "react": "^18.2.0" 1、在package.json平级目录下创建.env文件 2、在‘.env’文件里配置环境变量 【1】PUBLIC_URL 描述&#xff1a;编译时文件的base-href 官方描述&#xff1a; // We use PUBLIC_URL environment variable …...

VR全景智慧文旅,用科技助力旅游业振兴

引言&#xff1a; 近年来&#xff0c;科技的迅猛发展将我们带入一个全新的数字化时代&#xff0c;而虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;技术则以其令人惊叹的全新方式&#xff0c;影响着各个领域。其中&#xff0c;旅游业作为人们探索世界、体…...

系统架构设计专业技能 · 系统安全分析与设计(四)【加解密、数字信封、信息摘要、数字签名、数字书证、网络安全、信息安全】

系列文章目录 系统架构设计专业技能 网络规划与设计&#xff08;三&#xff09;【系统架构设计师】 系统架构设计专业技能 系统安全分析与设计&#xff08;四&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构设计&#xff08;一&#xff09;【系统架构设计师…...

网络工程作业四:拓扑图配置(动态)

1.作业要求2.作业预览图3.实验过程&#xff08;1&#xff09;.设备放置和划分网段&#xff08;顺便把IP地址标准好&#xff09;&#xff08;2&#xff09;配置网关在启动设备后&#xff0c;进入路由器用户视图&#xff0c;可以通过命令sys(system-view)&#xff0c;进入系统视图…...

Codex辅助编程实战:快速生成Graphormer模型数据预处理代码

Codex辅助编程实战&#xff1a;快速生成Graphormer模型数据预处理代码 1. 引言&#xff1a;AI编程助手的效率革命 想象一下这样的场景&#xff1a;深夜实验室里&#xff0c;你正在为Graphormer模型准备数据&#xff0c;面对一堆SMILES字符串需要转换成图结构数据。传统做法是…...

Alpamayo-R1-10B高算力适配:TensorRT加速与推理延迟优化实践

Alpamayo-R1-10B高算力适配&#xff1a;TensorRT加速与推理延迟优化实践 1. 项目背景与技术挑战 Alpamayo-R1-10B作为自动驾驶领域的专用视觉-语言-动作&#xff08;VLA&#xff09;模型&#xff0c;其100亿参数的规模带来了显著的性能提升&#xff0c;同时也对计算资源提出了…...

为什么你的Function Calling在Qwen-3和Claude-4上表现差3倍?2026奇点大会现场压测对比结果首次公开

第一章&#xff1a;2026奇点智能技术大会&#xff1a;大模型FunctionCalling 2026奇点智能技术大会(https://ml-summit.org) Function Calling 已成为大模型与外部系统深度协同的核心范式&#xff0c;2026奇点智能技术大会将其列为关键议题&#xff0c;聚焦于语义理解精度、工…...

电商客服+导购智能体的设计与开发确

这个代码的核心功能是&#xff1a;基于输入词的长度动态选择反义词示例&#xff0c;并调用大模型生成反义词&#xff0c;体现了 “动态少样本提示&#xff08;Dynamic Few-Shot Prompting&#xff09;” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts impo…...

嵌入式OTA封装库:解耦硬件与升级逻辑的生产级抽象层

1. OTAHandler&#xff1a;嵌入式系统OTA能力封装库深度解析1.1 设计定位与工程价值OTAHandler并非一个独立的固件升级协议栈&#xff0c;而是一个面向生产级嵌入式系统的OTA能力抽象层。其核心设计哲学是“解耦”与“可移植”——将底层通信驱动&#xff08;UART/USB/CAN/Ethe…...

基于 AI Agent 的童话编剧与绘本生成器(二)——爬虫篇

上一篇文章发表后&#xff0c;组内成员说不用写那么长的代码介绍&#xff0c;建议我只对实现的核心功能进行概括。 一、实现的爬虫脚本 在第4、5周实现了“从公开网页&#xff08;目前选则 Storyberries&#xff09;拉取童话/绘本类文本”的爬虫&#xff0c;为后面的「编剧 /…...

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具雅

一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储&#xff0c;而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码&#xff0c;常规方式只能重新配置连接&#xff0c;效率极低。本项目只作为学习研究使用&#xff0c;不做其他…...

幻觉不是Bug,是系统性失效:SITS2026定义的5级幻觉危害图谱与对应SLA保障阈值(2026新规速读版)

第一章&#xff1a;幻觉不是Bug&#xff0c;是系统性失效&#xff1a;SITS2026新规核心范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026&#xff08;Systemic Integrity & Trustworthiness Standard 2026&#xff09;框架下&#xff0c;“幻觉”被正式…...

打造沉浸式智能AI问答助手:Vue + UniApp 全端实战(支持 Markdown/公式/多模态交互)竿

OCP原则 ocp指开闭原则&#xff0c;对扩展开放&#xff0c;对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则&#xff08;DIP&#xff09; 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程&#xff0c; 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...