Vue模板语法(下)

文章目录

  • 一、事件处理
    • 1.1 监听事件​
    • 1.2 事件修饰符
    • 1.3 按键修饰符​
    • 1.4 实例
  • 二、表单综合案例
  • 三、自定义组件

一、事件处理

1.1 监听事件​

我们可以使用 v-on 指令 (简写为 @) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click="handler"@click="handler"

事件处理器 (handler) 的值可以是:

  • 内联事件处理器:事件被触发时执行的内联 JavaScript 语句 (与 onclick 类似)。
  • 方法事件处理器:一个指向组件上定义的方法的属性名或是路径。

这两种在前面的博客已经有体现

1.2 事件修饰符

在处理事件时调用 event.preventDefault() 或 event.stopPropagation() 是很常见的。尽管我们可以直接在方法内调用,但如果方法能更专注于数据逻辑而不用去处理 DOM 事件的细节会更好。

为解决这一问题,Vue 为 v-on 提供了事件修饰符。修饰符是用 . 表示的指令后缀,包含以下这些:

  • .stop
  • .prevent
  • .self
  • .capture
  • .once
  • .passive
<!-- 单击事件将停止传递 -->
<a @click.stop="doThis"></a><!-- 提交事件将不再重新加载页面 -->
<form @submit.prevent="onSubmit"></form><!-- 修饰语可以使用链式书写 -->
<a @click.stop.prevent="doThat"></a><!-- 也可以只有修饰符 -->
<form @submit.prevent></form><!-- 仅当 event.target 是元素本身时才会触发事件处理器 -->
<!-- 例如:事件处理器不来自子元素 -->
<div @click.self="doThat">...</div>

使用修饰符时需要注意调用顺序,因为相关代码是以相同的顺序生成的。因此使用@click.prevent.self会阻止元素及其子元素的所有点击事件的默认行为,而@click.self.prevent 则只会阻止对元素本身的点击事件的默认行为。

<!-- 添加事件监听器时,使用 `capture` 捕获模式 -->
<!-- 例如:指向内部元素的事件,在被内部元素处理前,先被外部处理 -->
<div @click.capture="doThis">...</div><!-- 点击事件最多被触发一次 -->
<a @click.once="doThis"></a><!-- 滚动事件的默认行为 (scrolling) 将立即发生而非等待 `onScroll` 完成 -->
<!-- 以防其中包含 `event.preventDefault()` -->
<div @scroll.passive="onScroll">...</div>

.capture、.once 和 .passive 修饰符与原生 addEventListener 事件相对应

请勿同时使用 .passive 和 .prevent,因为 .passive 已经向浏览器表明了你不想阻止事件的默认行为。如果你这么做了,则.prevent 会被忽略,并且浏览器会抛出警告。

1.3 按键修饰符​

在监听键盘事件时,我们经常需要检查特定的按键。Vue 允许在 v-on 或 @ 监听按键事件时添加按键修饰符。

<!-- 仅在 `key` 为 `Enter` 时调用 `submit` -->
<input @keyup.enter="submit" />

你可以直接使用 KeyboardEvent.key 暴露的按键名称作为修饰符,但需要转为 kebab-case 形式。

<input @keyup.page-down="onPageDown" />

在上面的例子中,仅会在 $event.key 为 ‘PageDown’ 时调用事件处理。

按鍵別名

Vue 为一些常用的按键提供了别名:

  • .enter
  • .tab
  • .delete (捕获“Delete”和“Backspace”两个按键)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

1.4 实例

事件冒泡
是指在计算机编程中的一种事件传递机制。

在事件驱动的编程模型中,当用户与程序交互时,例如点击鼠标或按下键盘,这些操作会触发相应的事件。事件冒泡是指当一个元素上的事件被触发时,它会向上级元素传递,直到根元素,这个过程就像气泡从底部冒到顶部一样。

在这里插入图片描述

那有时候我们不需要这种情况发生,该怎么解决呢?用咱们的事件修饰符

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script><style>.red{width: 400px;height: 400px;background-color: red;}.orange{width: 300px;height: 300px;background-color: orange;}.blue{width: 200px;height: 200px;background-color: blue;}.black{width: 100px;height: 100px;background-color: black;}</style></head><body><!-- 定义边界 --><div id="app"><p>冒泡事件</p><div class="red" @click="red"><div class="orange" @click="orange"><div class="blue" @click="blue"><!-- 添加stop修饰符阻止冒泡 --><div class="black" @click.stop="black"></div></div></div></div><p>提交答案</p><!-- 只能点一次 --><button @click.once="dosub">提交</button><p>按键修饰符</p><input v-on:keyup.enter="dosub" /></div></body><script type="text/javascript">// 绑定边界	ES6具体体现new Vue({el: '#app',data() {return {f200: 'f200'};},methods: {red() {alert("red");},orange() {alert("orange");},blue() {alert("blue");},black() {alert("black");},dosub(){alert("提交");}}})</script>
</html>

在这里插入图片描述

二、表单综合案例

在前端处理表单时,我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦:

<input:value="text"@input="event => text = event.target.value">

v-model 指令帮我们简化了这一步骤:

<input v-model="text">

另外,v-model 还可以用于各种不同类型的输入,<textarea>、<select> 元素。它会根据所使用的元素自动使用对应的 DOM 属性和事件组合:

  • 文本类型的 <input><textarea> 元素会绑定 value property 并侦听 input 事件;
  • <input type="checkbox"><input type="radio"> 会绑定 checked property 并侦听 change 事件;
  • <select> 会绑定 value property 并侦听 change 事件。
<!DOCTYPE html>
<html><head><meta charset="utf-8"><script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script><title>表单</title></head><body><div id="app"><h1>vue表单</h1><label>姓名:</label><input v-model="uname" /><br /><label>密码:</label><input v-model="upwd" type="password" /><br /><!-- 将用户的输入值转为 Number 类型 --><label>年龄:</label><input v-model.number="age" /><br /><label>性别:</label><input type="radio" v-model="sex" name="sex" value="1" /><input type="radio" v-model="sex" name="sex" value="0" /><br /><label>爱好:</label><div v-for="h in hobby"><input type="checkbox" v-model="hobbies" v-bind:value="h.id" />{{h.name}}</div><label>类别:</label><select v-model="type"><option value="-1">===请选择===</option><option v-for="t in types" v-bind:value="t.id">{{t.name}}</option></select><br /><label>备注:</label><textarea v-bind:value="mark"></textarea><br />确认<input type="checkbox" v-model="flag" /><input type="submit" v-bind:disabled="show" v-on:click="doSubmit" /></div></body><script type="text/javascript">new Vue({el: '#app',data() {return {uname: null,upwd: null,age: 10,sex: 1,hobby: [{id: 1,name: '唱'}, {id: 2,name: '跳'}, {id: 3,name: 'rap'}, {id: 4,name: '篮球'}],hobbies: [],types: [{id: 1,name: '天帝'}, {id: 2,name: '仙王'}, {id: 3,name: '人皇'}],type: null,mark: '学生备注',flag: false}},computed: {show: function() {return !this.flag;}},methods: {doSubmit: function() {console.log('doSubmit')var obj = {uname: this.uname,upwd: this.upwd,age:this.age+10,sex: this.sex,hobbies:this.hobbies,type: this.type,mark: this.mark,}console.log(obj);}}})</script>
</html>

在这里插入图片描述

三、自定义组件

Props
Props是一种特别的 attributes,你可以在组件上声明注册。当一个值被传递给 prop 时,它将成为该组件实例上的一个属性。该属性的值可以像其他组件属性一样,在模板和组件的 this 上下文中访问。

一个组件可以有任意多的 props,默认情况下,所有 prop 都接受任意类型的值。

父传子

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script></head><body><div id="app"><h1>{{msg}}</h1><!-- 使用自定义组件my-button的时候进行传值(相当于jsp标签往助手类中传值的概念) --><my-button m=""@click="nb"></my-button></div></body><script>// 定义全局组件的方式Vue.component('my-button', {props: ['m'],template: '<button v-on:click="doClickMyButton">我是一个自定义组件,被{{m}}点了{{n}}次</button>',data: function() {return {n: 0};},methods: {doClickMyButton: function() {console.log('doClickMyButton方法被调用');this.n++;}}}),new Vue({el: "#app",data(){return{msg:'自定义组件'};}});</script>
</html>

在这里插入图片描述
子传父

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script></head><body><div id="app"><h1>{{msg}}</h1><!-- 使用自定义组件my-button的时候进行传值(相当于jsp标签往助手类中传值的概念) --><my-button m="" @click='nb'></my-button></div></body><script>// 定义全局组件的方式Vue.component('my-button', {props: ['m'],template: '<button v-on:click="doClickMyButton">我是一个自定义组件,被{{m}}点了{{n}}次</button>',data: function() {return {n: 0};},methods: {doClickMyButton: function() {console.log('doClickMyButton方法被调用');this.n++;this.$emit('click', this.n, '荒', '石昊');}}}),new Vue({el: "#app",data() {return {msg: '自定义组件'};},methods: {nb: function(a, b, c) {console.log('方法被调用');console.log(a, b, c);}}});</script>
</html>

在这里插入图片描述

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

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

相关文章

第一次作业题解

第一次作业题解 P5717 【深基3.习8】三角形分类 思路 考的是if()的使用,还要给三条边判断大小 判断优先级&#xff1a; 三角形&#xff1f;直角、钝角、锐角等腰等边 判断按题给顺序来 代码 #include <stdio.h> int main() {int a 0, b 0, c 0, x 0, y 0, z 0…

智慧公厕云管理平台:筑牢云上“城市公共厕所一张网”

在现代城市中&#xff0c;公共厕所是人们日常生活中不可或缺的一部分。然而&#xff0c;过去的公共厕所管理方式往往效率低下&#xff0c;维护困难&#xff0c;给市民带来了不便。为了解决这一问题&#xff0c;智慧公厕应运而生&#xff0c;赋予传统公共厕所智慧化的管理效能。…

D. A Simple Task

Problem - D - Codeforces 思路&#xff1a;这个题就是求环的数量&#xff0c;通过数据范围的大小&#xff0c;我们可以想到用状压dp来做&#xff0c;因为只有19个点&#xff0c;我们可以将环的路径进行状态压缩&#xff0c;用一个二进制数表示环&#xff0c;当某一位为1时表示…

qt+ffmpeg视频播放器实现音视频倍速功能

目录 一、前言 二、开发环境参考源码 开发环境&#xff1a; 参考源码&#xff1a; 三、添加倍速控件 四、倍速调节代码 五、视频倍速调节 六、音频倍速方案一 七、音频倍速方案二 八、最终效果 九、参考文献 十、结语 一、前言 参考了云天之巅的FFMPEG Qt视频播放器…

蓝桥杯每日一题2023.9.22

4960. 子串简写 - AcWing题库 题目描述 题目分析 原本为纯暴力但是发现会超时&#xff0c;可以加入前缀和&#xff0c;从前往后先记录一下每个位置c1出现的次数 再从前往后扫一遍&#xff0c;如果遇到c2就将答案加上此位置前的所有c1的个数&#xff08;直接加上此位置的前缀…

csdn未经允许将我的文章设置成vip收费

以前在csdn写了一些笔记&#xff0c;后来不用csdn了&#xff0c;想着留下这些笔记或多或少能帮助其他初学者&#xff0c;就没管它。结果csdn把文章设置成收费了&#xff0c;这个收费不是我本人弄的&#xff0c;是csdn弄的&#xff01;我现在只能把这些文章删除掉了。

FPGA设计时序约束二、输入延时与输出延时

目录 一、背景 二、set_input_delay 2.1 set_input_delay含义 2.2 set_input_delay参数说明 2.3 使用样例 三、set_output_delay 3.1 set_output_delay含义 3.2 set_output_delay参数说明 3.3 使用样例 四、样例工程 4.1 工程代码 4.2 时序报告 五、参考资料 一、…

SpringCloud Alibaba 入门到精通 - Sentinel

SpringCloud Alibaba 入门到精通 - Sentinel 一、基础结构搭建1.父工程创建2.子工程创建 二、Sentinel的整合SpringCloud1.微服务可能存在的问题2.SpringCloud集成Sentinel搭建Dashboard3 SpringCloud 整合Sentinel 三、服务降级1 服务降级-Sentinel2 Sentinel 整合 OpenFeign3…

SW利用点光源来校核

先要建立坐标系&#xff0c;然后查这个坐标系的绝对坐标 然后删除其他光源&#xff0c;把环境光源降低最小 最后添加点光源&#xff0c;位置在之前查的坐标点

【密评】商用密码应用安全性评估从业人员考核题库(一)

商用密码应用安全性评估从业人员考核题库&#xff08;一&#xff09; 国密局给的参考题库5000道只是基础题&#xff0c;后续更新完5000还会继续更其他高质量题库&#xff0c;持续学习&#xff0c;共同进步。 1 单项选择题 党的二十大主题是&#xff1a;高举中国特色社会主义伟…

modbusTCP【codesys】

1添加控制器【控制器】&#xff1a; 右击左侧树型菜单【Device】→选择【添加设备】&#xff0c;在弹出对话框中下拉选择【以太网适配器】下的【Ethernet】&#xff0c;最后点击【添加设备】。 注意固件能支持的版本。我的是3.5.17 2添加主站【主站】 2添加从站【从站】 双…

OpenAI ChatGPT API 文档之 Embedding

译者注&#xff1a; Embedding 直接翻译为嵌入似乎不太恰当&#xff0c;于是问了一下 ChatGPT&#xff0c;它的回复如下&#xff1a; 在自然语言处理和机器学习领域&#xff0c;"embeddings" 是指将单词、短语或文本转换成连续向量空间的过程。这个向量空间通常被称…

目标追踪学习经验总结

标题目标追踪算法学习经验总结   最近对目标追踪算法进行了学习&#xff0c;以下是我的学习经验&#xff0c;如有不对之处&#xff0c;欢迎大家指正。 1、简介 1.1 定义 目标跟踪是通过分析视频图片序列&#xff0c;对检测出的各个候选目标区域实施匹配&#xff0c;定位出这…

【面试八股】IP协议八股

IP协议八股 子网掩码的作用为什么IP协议需要分片IP协议什么时候需要分片IP协议是怎么进行分片的那么IP协议是如果进行标识属于同一个分片呢&#xff1f;TCP协议和UDP协议将数据交给IP协议之后&#xff0c;是否需要分片传输&#xff1f; 子网掩码的作用 用来标识网络号和主机号…

029-从零搭建微服务-消息队列(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

Java基础常考知识点(基础、集合、异常、JVM)

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有需要我的支持&#xff0c;请私信或评论留言&#xff01; Java基础常考知识点…

笔记本摄像头怎么打开?记牢这5个简单方法!

“我有一个紧急视频会议&#xff0c;但是关键时刻我的笔记本电脑摄像头居然打不开了&#xff0c;真的让我很崩溃。有什么方法可以快速解决这个问题吗&#xff1f;非常感谢&#xff01;” 在互联网时代&#xff0c;电脑对我们来说非常重要。而借助电脑摄像头与朋友交流或者与同事…

601-体育馆的人流量

文章目录 601-体育馆的人流量1. 题目2. 思路3. 解决4. 运行结果 601-体育馆的人流量 1. 题目 2. 思路 思路&#xff1a;查询Stadium表中人流量超过100的记录&#xff0c;将查询结果与自身的临时表连接&#xff0c;再使用where获得满足条件的记录 查询Stadium表中人流量超过10…

asp.net服装管理系统三层架构

asp.net服装管理系统三层架构说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库&#xff0c;并采用EF实体模型开发。 三层架构并采用EF实体模型开发 功能模块&#xff1a; 运行环境&#xff1…

CyclicBarrier 、CountDownLatch 、Semaphore 的用法

1 CountDownLatch&#xff08;线程计数器 &#xff09; CountDownLatch类位于java.util.concurrent 包下&#xff0c;利用它可以实现类似计数器的功能。比如有一个任务 A&#xff0c;它要等待其他 4 个任务执行完毕之后才能执行&#xff0c;此时就可以利用 CountDownLatch 来实…