Vue基础语法【下】

news2025/2/28 6:19:04

目录

一、事件处理器

1.事件修饰符

   .stop

  .prevent

   .capture

  .self

  .once

2.按键修饰符

.enter

.tab

.delete

.esc

.space

.up

.down

.left

.right

.ctrl、.alt、.shift、.meta

二、表单赋值与取值

三、自定义组件

1.组件介绍

2.局部组件

3.全局组件

4.组件通信

 组件传参【父传子】

组件传参【子传父】 


一、事件处理器

1.事件修饰符

  Vue通过由点(.)表示的指令后缀来调用修饰符

   .stop

阻止单击事件冒泡,即停止事件在DOM树中的传播。

<button v-on:click.stop="doSomething">Click me</button>

当按钮被点击时,事件不会继续向上冒泡,只会触发doSomething方法。

  .prevent

修饰符可以阻止事件的默认行为,提交事件不再重载页面

<form v-on:submit.prevent="submitForm">
  <!-- form fields -->
  <button type="submit">Submit</button>
</form>

当表单被提交时,事件的默认行为(刷新页面)会被阻止,而是会触发submitForm方法。

   .capture

修饰符可以将事件监听器添加到捕获阶段,而不是冒泡阶段。

<div v-on:click.capture="doSomething">Click me</div>

当点击div元素时,事件会在捕获阶段触发doSomething方法。

  .self

只当事件在该元素本身(而不是子元素)触发时触发回调

<div v-on:click.self="handleClick">
  <button>Click me</button>
</div>

只有当点击div元素本身时,事件处理函数handleClick才会被触发。如果点击div内部的button元素,事件将不会被触发。

  .once

修饰符只能让事件只触发一次。

<button v-on:click.once="doSomething">Click me</button>

当按钮被点击时,doSomething方法只会被触发一次。

 注1:什么是事件冒泡?

案例

<!DOCTYPE html>
<html>
	 <head>
		<meta charset="utf-8">
		<title>插值</title>
		<!-- 导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<style type="text/css">
			.one{
				background-color: aqua;
				height: 25rem;
				width: 25rem;
			}
			.two{
				background-color: beige;
				height: 18.75rem;
				width: 18.75rem;
			}
			.three{
				background-color: blue;
				height: 12.5rem;
				width: 12.5rem;
			}
			.four{
				background-color: blueviolet;
				height: 6.25rem;
				width: 6.25rem;
			}
		</style>
	
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<div id="" class="one" @click="fun1">
				<div class="two" @click="fun2">
					<div class="three" @click="fun3">
						<div class="four" @click="fun4">
							
						</div>
					</div>
				</div>
			</div>
			
			
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return{
						msg:"hello meinv",
					};
				},
				methods:{
					fun1(){
						alert("你是不是就想点我");
					},
					fun2(){
							alert("你为什么点我");
					},
					fun3(){
							alert("你怎么点我");
					},
					fun4(){
							alert("你点我");
					}
				}
			});
		</script>
		
		
	</body>
</html>

如何避免类似的冒泡呢?

我们可以在点击事件中添加我们的.stop阻止单击事件冒泡!!

<div id="" class="one" @click="fun1">
				<div class="two" @click.stop="fun2">
					<div class="three" @click.stop="fun3">
						<div class="four" @click.stop="fun4">
							
						</div>
					</div>
				</div>

2.按键修饰符

.enter

当用户按下回车键时触发事件。

<input v-on:keyup.enter="submitForm">

当用户在输入框中按下回车键时,会触发submitForm方法。

.tab

当用户按下Tab键时触发事件。

<input v-on:keyup.tab="nextField">

当用户在输入框中按下Tab键时,会触发nextField方法。

.delete

当用户按下删除键或退格键时触发事件。

<input v-on:keyup.delete="deleteItem">

当用户在输入框中按下删除键或退格键时,会触发deleteItem方法。

.esc

当用户按下Esc键时触发事件。

<input v-on:keyup.esc="cancelAction">

当用户在输入框中按下Esc键时,会触发cancelAction方法。

.space

当用户按下空格键时触发事件。

<button v-on:keyup.space="startGame">Start</button>

当用户在按钮上按下空格键时,会触发startGame方法。

.up

当用户按下上箭头键时触发事件。

<input v-on:keyup.up="increaseValue">

当用户在输入框中按下上箭头键时,会触发increaseValue方法。

.down

当用户按下下箭头键时触发事件。

<input v-on:keyup.down="decreaseValue">

当用户在输入框中按下下箭头键时,会触发decreaseValue方法。

.left

当用户按下左箭头键时触发事件。

<input v-on:keyup.left="moveLeft">

当用户在输入框中按下左箭头键时,会触发moveLeft方法。

.right

当用户按下右箭头键时触发事件。

<input v-on:keyup.right="moveRight">

当用户在输入框中按下右箭头键时,会触发moveRight方法。

.ctrl、.alt、.shift、.meta

当用户按下对应的修饰键时触发事件。

<input v-on:keyup.ctrl="saveData">

当用户在输入框中按下Ctrl键时,会触发saveData方法。

二、表单赋值与取值

表单赋值与取值综合案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<!-- 导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<div id="ctb">
			<h1>表单赋值与取值</h1>
			<div>
				<label>账号:</label>
				<input type="text" v-model="uname" placeholder="请输入账号">
			</div>
			<div>
				<label>密码:</label>
				<input type="password" v-model="upwd" placeholder="请输入密码">
			</div>
			<div>
				<label>年龄:</label>
				<input type="text" v-model.number="age" placeholder="请输入年龄">
			</div>
			<div>
				<label>性别:</label>
				<input type="radio" v-model="sex" value="1">男
				<input type="radio" v-model="sex" value="2">女
			</div>
			<div>
				<label>爱好:</label>
				<div style="display: inline;" v-for="h in hobbies">
					<input type="checkbox" :value="h.id" v-model="hobby" />{{h.name}}
				</div>
			</div>
			<div>
				<label>地区</label>
				<select v-model="area">
					<option value="">-- 请选择 --</option>
					<option v-for="c in city" :value="c.id">{{c.name}}</option>
				</select>
			</div>
			<div>
				<label>备注:</label>
				<textarea v-model="remark" placeholder="请输入注明"></textarea>
			</div>
			<div>
				<input type="checkbox" v-model="agreed">是否已阅读并同意协议
			</div>
			<div>
				<button @click="submit" :disabled="disabled">提交</button>
			</div>
		</div>
		<script>
			var vm = new Vue({
				el: "#ctb",
				data: {
					// 设置表单
					uname: null,
					upwd: null,
					age: 18,
					sex: 1,
					hobbies: [{
							id: '1',
							name: 'music'
						},
						{
							id: '2',
							name: 'basketball'
						},
						{
							id: '3',
							name: 'travel'
						}
					],
					hobby: [],
					remark: null,
					city: [{
							id: "1",
							name: "长沙"
						},
						{
							id: "2",
							name: "永州"
						},
						{
							id: "3",
							name: "道州"
						},
						{
							id: "4",
							name: "勾八"
						},
						{
							id: "5",
							name: "衡阳"
						},
						{
							id: "6",
							name: "大理"
						}
					],
					area: null,
					agreed: false,
					disabled: true
				},
				watch: {
					agreed: function(val) {
						if (val) {
							this.disabled = false;
						} else {
							this.disabled = true;
						}
					}
				},
				/* 获取表单内容 */
				methods: {
					submit: function() {
						let data = {
							uname: this.uname,
							upwd: this.upwd,
							age: this.age,
							sex: this.sex,
							hobby: this.hobby,
							city: this.area,
							remark: this.remark
						}
						console.log(data);
					}
				}
 
			});
		</script>
	</body>
</html>

三、自定义组件

1.组件介绍

  组件(Component)是Vue最强大的功能之一

 组件可以扩展HTML元素,封装可重用的代码

 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树

2.局部组件

在Vue实例中定义和使用局部组件非常简单。我们可以在Vue实例的components选项中定义组件,并在模板中使用它。

<div id="app">
    <my-button>点我</my-button>
  </div>

<script>
  // 在Vue实例中定义局部组件
  new Vue({
			el: '#app',
			components: {
				"my-button": {
					template: "<button>自定义组件</button>"
				}
			}
		})
</script>

3.全局组件

全局组件可以在整个应用程序中使用,无需在每个Vue实例中重新定义。我们还可以在Vue实例之外定义全局组件,并在需要的地方使用它。

<script type="text/javascript">
		Vue.component('my-button', {
			//定义组件中的变量
			props:['pp'],
			
			template:'<button v-on:click="btn">{{pp}}打我</button>',
			data:function(){
				return {
					
				}
			}
		});
		
	</script>

4.组件通信

        Vue自定义事件是为组件间通信设计  ,vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定。

        不同于组件和prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称,建议使用“短横线分隔命名”

 父Vue实例->Vue实例,通过prop传递数据

 子Vue实例->父Vue实例,通过事件传递数据

 组件传参【父传子】

<!DOCTYPE html>
<html>
	 <head>
		<meta charset="utf-8">
		<title>插值</title>
		<!-- 导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			
			<my-button m='嘿嘿'>点我</my-button>
			<h1>组件通信---父传子</h1>
			<my-button m='不要'>点我</my-button>
			</div>
			
			
		
		
		<script type="text/javascript">
			new Vue({
				el:"#app",
				components:{
					'my-button':{
						props:['m'],
						 template:'<button @click="clickMe">{{m}}点击了{{n}}次</button>',
						 data:function(){
							 return{
								 n:1
							 }
						 },
						 methods:{
							 clickMe(){
								 this.n++;
							 }
						 }
					}
				},
				data(){
					return{
						msg:"hello meinv"
					};
				}
				
			});
			
		</script>
		
		
	</body>
</html>

 

组件传参【子传父】 

<!DOCTYPE html>
<html>
	 <head>
		<meta charset="utf-8">
		<title>组件通信---子传父</title>
		<!-- 导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			
			<h1>组件通信---子传父</h1>
			<my-button m='不要' @ctb='getParam'>点我</my-button>
			</div>
			
			
		
		
		<script type="text/javascript">
			new Vue({
				el:"#app",
				components:{
					'my-button':{
						props:['m'],
						 template:'<button @click="clickMe">{{m}}点击了</button>',
						 methods:{
							 clickMe(){
								 let book='我是你的四月天';
								 let price=90;
								 this.$emit('ctb',book,price)
							 }
						 }
					}
				},
				data(){
					return{
						msg:"hello meinv"
					};
				},
				methods:{
					getParam(a,b){
						console.log(a,b);
					}
				}
				
			});
			
		</script>
		
		
	</body>
</html>

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

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

相关文章

idea如何关闭项目文件显示的浏览器图标

这里写自定义目录标题 1.idea经常项目文件右上角弹出图标2.setting中Tools 取消勾选浏览器 1.idea经常项目文件右上角弹出图标 2.setting中Tools 取消勾选浏览器

vue的模板语法(下篇)

目录 一.事件处理 二.表单的综合案例 三.组件通信⭐⭐ 3.1 自定义组件 3.2 组件通信之父传子 3.3组件通信之子传父 一.事件处理 Vue通过由点(.)表示的指令后缀来调用修饰符&#xff0c; .stop .prevent .capture .self .once 如下&#xff1a; 阻止单击事件冒泡 <a v-on…

Mybatis学习笔记11 缓存相关

Mybatis学习笔记10 高级映射及延迟加载_biubiubiu0706的博客-CSDN博客 缓存:cache 缓存的作用:通过减少IO的方式,来提高程序的执行效率 Mybatis的缓存:将select语句的查询结果放到缓存(内存)当中,下一次还是这条select语句的话,直接从缓存中取,不再查数据库.一方面是减少了I…

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 数据增强3. 模型构建4. 模型训练及保存1&#xff09;模型训练2&#xff09;模型保存 5. 模型评估 相关其它博客工程源代码下载其它资料下载 前言 本项目依赖于Keras深度学习模型&#xff0c;旨在对…

JavaWeb学习总结(在IntelliJ IDEA中配置使用Tomcat)

1、配置 ​​​​​​​ 在 Libray 中选 Java 选项&#xff08;也就是安装Tomcat的路径&#xff09; 如果运行时端口被占用可以修改端口 例如&#xff1a;原8080&#xff0c;可改为8081&#xff08;也可修改其他&#xff09; 2、使用Serlvet package com.company;import java…

将近 5 万字讲解 Python Django 框架详细知识点(更新中)

Django 框架基本概述 Django 是一个开源的 Web 应用后端框架&#xff0c;由 Python 编写。它采用了 MVC 的软件设计模式&#xff0c;即模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。在 Django 框架中&am…

Oracle查询固定时间间隔

获取每一天 SELECT (trunc(to_date(2023-01-01,YYYY-MM-DD), dd) LEVEL -1) as DATA_TIME FROM dual CONNECT BY LEVEL < 3;解释&#xff1a; 这个 SQL 查询语句的目的是生成一个包含三个日期的结果集。查询的结果是从当前日期开始的三个连续日期。让我解释一下查询的各个…

ClickHouse与Elasticsearch比较总结

目录 背景 分布式架构 存储架构 写入链路设计 Elasticsearch 再谈Schemaless 查询架构 计算引擎 数据扫描 再谈高并发 性能测试 日志分析场景 access_log&#xff08;数据量197921836&#xff09; trace_log&#xff08;数据量569816761&#xff09; 官方Ontime测…

爬虫入门基础与Selenium反爬虫策略

目录 一、爬虫入门基础 1、什么是爬虫&#xff1f; 2、爬虫的分类 3、爬虫的基本流程 二、Selenium简介 1、Selenium是什么&#xff1f; 2、Selenium的用途 三、应对反爬虫的Selenium策略 1、使用代理IP 2、模拟用户行为 3、设置合理的请求间隔时间 4、随机化请求参…

社区活跃开发者 Aaron 加入 sCrypt

Aaron&#xff08;周全&#xff09;是资深的 BSV 开发者&#xff0c;前 nChain BSV 基础架构团队成员&#xff0c;也是比特币协会在中国任命的首位技术推广专家。作为 BSV 社区的活跃成员&#xff0c;他多次作为演讲者参与区块链技术会议&#xff0c;开发了 Webot 应用、Witnes…

【完美解决】GitHub连接超时问题 Recv failure: Connection was reset

问题&#xff1a; 已经开了梯子但是在Idea中使用git&#xff08;GitHub&#xff09;还是连接超时Recv failure: Connection was reset。此时需要让git走代理。 解决方案&#xff1a; 1.对右下角网络点击右键 -> 打开网络和Internet设置 2.代理 -> 查看到地址和端口号…

智能生活从这里开始:数字孪生驱动的社区

数字孪生技术&#xff0c;这个近年来备受瞩目的名词&#xff0c;正迅速渗透到社区发展领域&#xff0c;改变着我们居住的方式、管理的方式以及与周围环境互动的方式。它不仅仅是一种概念&#xff0c;更是一种变革&#xff0c;下面我们将探讨数字孪生技术如何推动社区智能化发展…

淘宝分布式文件存储系统( 二 ) -TFS

淘宝分布式文件存储系统( 二 ) ->>TFS 目录 : 大文件存储结构哈希链表的结构文件映射原理及对应的API文件映射头文件的定义 大文件存储结构 : 采用块(block)文件的形式对数据进行存储 , 分成索引块,主块 , 扩展块 。所有的小文件都是存放到主块中的 &#xff0c;扩展块…

湖南湘潭家具3D轮廓扫描测量家居三维数字化外观逆向设计-CASAIM中科广电

随着科技的不断进步&#xff0c;CASAIM三维扫描技术在各个行业中得到了广泛应用&#xff0c;家具行业也不例外。传统的家具设计和展示方式已经无法满足现代消费者的个性化、多元化需求&#xff0c;而三维扫描技术的出现为家具行业带来了新的机遇和可能性。 家具表面有雕刻图案…

Selenium和Requests搭配使用

Selenium和Requests搭配使用 前要1. CDP2. 通过requests控制浏览器2. 1 代码一2. 2 代码2 3. 通过selenium获取cookie, requests携带cookie请求 前要 之前有提过, 用selenium控制本地浏览器, 提高拟人化,但是效率比较低,今天说一种selenium和requests搭配使用的方法 注意: 一定…

企业该如何选择数字化转型工具?_光点科技

随着科技的不断进步和数字化的浪潮席卷全球&#xff0c;企业数字化转型已经成为了保持竞争力和持续增长的关键因素之一。无论企业规模大小&#xff0c;数字化转型都可以提高效率、降低成本、改善客户体验&#xff0c;从而实现更好的业务结果。然而&#xff0c;要成功进行数字化…

Unity云原生分布式运行时

// 元宇宙时代的来临对实时3D引擎提出了诸多要求&#xff0c;Unity作为游戏行业应用最广泛的3D实时内容创作引擎&#xff0c;为应对这些新挑战&#xff0c;提出了Unity云原生分布式运行时的解决方案。LiveVideoStack 2023上海站邀请到Unity中国的解决方案工程师舒润萱&#x…

iPhone辐射超标,发布三年突然禁售了

昨晚 iPhone 15 预售大家抢到了吗&#xff1f; 虽然13日发布会后大家的反应十分冷静&#xff0c;但身体还是很诚实&#xff0c;官网都排到6-7周以后了... 在大伙都争着第一波尝鲜的时候&#xff0c;有一个地方正准备禁售 iPhone 。 不用想肯定是欧盟某个国家啦&#xff0c;这…

python正则表达(06)

python正则表达(06) 文章目录 python正则表达(06)1 正则表达式概念2 正则的三个基础方法2.1 match、search、findall三个基础方法2.2 re.match() 函数2.2.1 re.match(匹配规则&#xff0c;被匹配字符串)2.2.2验证是否开头匹配&#xff0c;match是匹配开头&#xff0c;后面的是不…

Ingress Controller

什么是 Ingress Controller &#xff1f; 在云原生生态中&#xff0c;通常来讲&#xff0c;入口控制器( Ingress Controller )是 Kubernetes 中的一个关键组件&#xff0c;用于管理入口资源对象。 Ingress 资源对象用于定义来自外网的 HTTP 和 HTTPS 规则&#xff0c;以控制进…