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. 无缓存性,只有当当前值发生变化时才会执行/响应

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

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

相关文章

接口测试之Jmeter+Ant+Jenkins接口自动化测试平台

平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行&#xff0c;自动生成测试报告&#xff0c;以及持续集成。Jmeter支持接口的测试&#xff0c;Ant支持自动构建&#xff0c;而Jenkins支持持续集成&#xff0c;所以三者组合在一起可以构成一个功能完善的接口自动化…

BOLT- 识别和优化热门的基本块

在BOLT中&#xff0c;识别和优化热门的基本块之所以关键&#xff0c;是因为BOLT的主要目标是优化程序以更好地利用硬件特性&#xff0c;特别是指令缓存&#xff08;ICache&#xff09;。以下是BOLT如何识别和优化热门基本块的流程&#xff1a; 收集性能数据: BOLT开始的时候并不…

idea - 刷新 Git 分支数据 / 命令刷新 Git 分支数据

一、idea - 刷新 Git 分支数据 idea 找到 fetch 选项&#xff0c;重新获取分支数据 二、命令刷新 Git 分支数据 git fetch参考链接 1. 远程Gitlab新建的分支在IDEA里不显示

jxls导出问题

![请添加图片描述](https://img-blog.csdnimg.cn/bc74c4207818491c93b75e19b3333451.png 为什么最后导出的文件还是按原样导出啊&#xff0c;没有填充数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d4500b9a98c042f6b64a5d0650071303.png

qt多线程使用方式

有5个方式&#xff1a;可以参考这个博客&#xff1a;Qt 中开启线程的五种方式_qt 线程_lucky-billy的博客-CSDN博客 注&#xff1a;为了实现更加灵活的线程管理&#xff08;因为这5种都有一些不方便之处&#xff1a;QThread需要子类化且不能传参&#xff0c;moveToThread不能传…

【leetcode】459. 重复的子字符串(easy)

给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s “aba” 输出: false 示例 3: 输入: s “abcabcabcabc” 输出: true 解释: 可由子串 “ab…

ChatGPT等人工智能编写文章的内容今后将成为常态

BuzzFeed股价上涨200%可能标志着“转向人工智能”媒体趋势的开始。 周四&#xff0c;一份内部备忘录被华尔街日报透露BuzzFeed正计划使用ChatGPT聊天机器人-风格文本合成技术来自OpenAI&#xff0c;用于创建个性化盘问和将来可能的其他内容。消息传出后&#xff0c;BuzzFeed的…

ubuntu 20.04 RK3568网络的优先级设置

1、背景 硬件使用RK3568 CPU&#xff0c;操作系统采用ubuntu 20.04 Lxqt桌面的版本。硬件上具有一个有线以太网卡&#xff0c;一个wifi网卡&#xff0c;一个5G网卡。由于操作系统默认的网络优先级为有线网卡的最高&#xff0c;5G网卡次之。在一个业务应用中需要5G网卡的连接外…

文本三剑客之grep命令和awk命令 1.0 版本

grep awk 1.grep命令1.1 基本格式1.2 常用选项 2.awk命令2.1 awk工作原理2.2 awk命令格式2.3 awk常用内置变量 1.grep命令 1.1 基本格式 grep [选项]… 查找条件 目标文件1.2 常用选项 选项功能 -m [ x ]匹配x次 后停止,x为具体数字-v取反 -i忽略字符大小写 -n显示匹配的 …

Dynamic CRM开发 - 实体介绍

实体简介 在CRM中,实体(Entity)是数据的基本载体,也是构建业务逻辑网络的基础节点。 实体可以理解为数据库中的一张表(实体中的字段对应数据库表的字段),比如创建一个实体存储客户信息,创建一个实体存储产品信息,产品实体里可以创建一个查找类型的字段(类似表的外键)…

【Express.js】集成RabbitMQ

集成RabbitMQ 本节我们介绍在 express.js 中集成 rabbitmq. RabbitMQ 是一个消息队列中间件&#xff0c;常用于请求削峰&#xff0c;事务的队列处理&#xff0c;事件订阅机制的实现等。 准备工作 创建一个 express.js 项目&#xff08;本文基于evp-express-cli&#xff09;…

【三维编辑】Seal-3D:基于NeRF的交互式像素级编辑

文章目录 摘要一、引言二、方法2.1.基于nerf的编辑问题概述2.2.编辑指导生成2.3.即时预览的两阶段学生训练 三、实验四、代码总结 项目主页: https://windingwind.github.io/seal-3d/ 代码&#xff1a;https://github.com/windingwind/seal-3d/ 论文: https://arxiv.org/pdf/23…

创建一个Spring Boot项目

安装所需软件&#xff1a;首先确保你的计算机上已经安装了Java JDK和Maven构建工具。你可以从官方网站下载并按照说明进行安装。 创建一个新的Spring Boot项目&#xff1a;在命令行或终端中使用Maven命令创建一个新的Spring Boot项目。执行以下命令&#xff1a;mvn archetype:…

阿里云轻量应用服务器_2核4G4M_2核2G3M_性能测评

阿里云轻量应用服务器2核2G3M带宽108元一年&#xff0c;系统盘为50GB高效云盘&#xff1b;轻量服务器2核4G4M带宽&#xff0c;60GB高效云盘297.98元12个月。目前轻量应用服务器只有2核2G和2核4G有活动&#xff0c;阿里云百科分享阿里云轻量应用服务器入口&#xff1a; 目录 阿…

【Qt高阶】老Qt都不一定清楚的“QObject线程亲和性”【2023.08.13】

老Qt都不一定清楚的“线程亲和性” 与题目无关 感觉自己还挺2&#xff0c;有粉丝点了那个契约者会给up发个鼓励的话&#xff0c;我还以为是人私信发的&#xff0c;都挨个感谢了&#xff0c;后来才意识到是系统自动发的&#x1f623;&#x1f623;&#x1f623;。 自上上期视频对…

Three.js阴影

目录 Three.js入门 Three.js光源 Three.js阴影 Three.js纹理贴图 使用灯光后&#xff0c;场景中就会产生阴影。物体的背面确实在黑暗中&#xff0c;这称为核心阴影&#xff08;core shadow&#xff09;。我们缺少的是落下的阴影&#xff08;drop shadow&#xff09;&#…

【数据结构】——栈、队列的相关习题

目录 题型一&#xff08;栈与队列的基本概念&#xff09;题型二&#xff08;栈与队列的综合&#xff09;题型三&#xff08;循环队列的判空与判满&#xff09;题型四&#xff08;循环链表表示队列&#xff09;题型五&#xff08;循环队列的存储&#xff09;题型六&#xff08;循…

一文揭秘饿了么跨端技术的演进、实践与落地

跨端技术背景与演进历程 跨端&#xff0c;究竟跨的是哪些端&#xff1f; 自 90 年的万维网出现&#xff0c;而后的三十多年&#xff0c;我们依次经历了 PC 时代、移动时代&#xff0c;以及现在的万物互联&#xff08;的 IoT &#xff09;时代&#xff0c;繁荣的背后&#xff…

【Apollo】Apollo-ros版本架构学习与源码分析

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Apollo-ros版本架构学习与源码分析。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&a…

微信小程序如何自定义分享卡片文案和图片

微信小程序提供了onShareAppMessage方法&#xff0c;专门用来监听用户点击页面内转发按钮&#xff08;button 组件 open-type"share"&#xff09;或右上角菜单“转发”按钮的行为&#xff0c;并自定义转发内容。 > 注意&#xff1a;只有定义了此事件处理函数&…