Vue基础语法【下】

2023-09-20 13:13:25

目录

一、事件处理器

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>

更多推荐

上海亚商投顾:沪指震荡调整 两市成交金额跌破6000亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。一.市场情绪三大指数昨日集体调整,创业板指续创3年多以来新低。ST板块继续走强,*ST柏龙、ST恒久等十余股涨停。华为产业链午后活跃,捷荣技术涨停,股价创出历史新高。减肥药概念股逆势走强,翰宇药业20cm涨停。脑机接口概

Django(18):中间件原理和使用

目录概述Django自带中间件Django的中间件执行顺序自定义中间件函数使用类其它中间件钩子函数process_viewprocess_exceptionprocess_template_response如何使用这3个钩子函数?全局异常处理小结概述中间件(middleware)是一个镶嵌到Django的request

网络爬虫-----http和https的请求与响应原理

目录前言简介HTTP的请求与响应浏览器发送HTTP请求的过程:HTTP请求主要分为Get和Post两种方法查看网页请求常用的请求报头1.Host(主机和端口号)2.Connection(链接类型)3.Upgrade-Insecure-Requests(升级为HTTPS请求)4.User-Agent(浏览器名称)5.Ac

Spring Cloud Gateway快速入门(一)——网关简介

文章目录前言一、什么是网关1.1gateway的特点1.2为什么要使用gateway二、使用Nginx实现网关服务什么是网关服务?为什么选择Nginx作为网关服务?如何使用Nginx实现网关服务?1.安装Nginx2.配置Nginx3.启动Nginx4.测试网关服务总结代码编写三、使用Gateway实现网关服务什么是网

【Java 基础篇】Java后台线程和守护线程详解

在Java多线程编程中,有两种特殊类型的线程:后台线程(DaemonThread)和守护线程(DaemonThread)。这两种线程在一些特定的场景下非常有用,但也需要谨慎使用。本文将详细介绍后台线程和守护线程的概念、特性、用法,以及注意事项。什么是后台线程和守护线程?后台线程(DaemonThread)后台线程是一种

数组和指针笔试题解析之【指针】

目录🍂笔试题1:🍂笔试题2:🍂笔试题3:🍂笔试题4:🍂笔试题5:🍂笔试题6:🍂笔试题7:🍂笔试题8:🍂笔试题1:intmain(){inta[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));return0;}运行结

CTF 全讲解:[SWPUCTF 2022 新生赛]webdog1__start

文章目录参考环境题目learning.php信息收集isset()GET请求查询字符串全局变量$_GETMD5绕过MD5韧性脆弱性md5()弱比较隐式类型转换字符串连接数学运算布尔判断相等运算符MD5绕过科学计数法前缀0E与0e绕过start.php信息收集头部检索f14g.php信息收集探秘F1l1l1l1l1lag

【NLP入门教程】二十三、循环神经网络(RNN)| 小白专场

本教程旨在为初学者提供一份全面而系统的NLP入门指南,探索NLP的核心概念、方法和技术。无论你是计算机科学的新手,还是对自然语言处理领域感兴趣的研究人员,本教程都将为你提供所需的基础知识和实用技能。专栏地址:📕【NLP入门教程】当谈到自然语言处理(NLP)时,深度学习已经成为一种强大而广泛应用的技术。深度学习是一种机

Redis从入门到精通(二:数据类型)

数据存储类型介绍Redis数据类型(5种常用)stringhashlistsetsorted_set/zset(应用性较低)redis数据存储格式redis自身是一个Map,其中所有的数据都是采用key:value的形式存储数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串string

汇编基础(2) -- ARM64

简介ARM架构中,ARM64(也称为AArch64)是一种64位处理器架构,它是ARMv8指令集的一部分。与之前的32位ARM架构相比,ARM64提供了更大的寄存器容量、更广阔的地址空间和更高的计算能力。64位版本的指令集和32位版本的指令集有一些区别,这些区别主要涉及到以下几个方面:寄存器:ARM64架构提供了31个

[ 云计算 | AWS ] IAM 详解以及如何在 AWS 中直接创建 IAM 账号

本章节主要介绍IAM相关知识点以及在AWS控制台窗口如何创建一台AmazonIAM账号。文章目录一、什么是IAM?二、IAM常见种类2.1EIAM2.2CIAM2.3云厂商IAM三、账号(Account)三户模型四、认证(Authentication)4.1认证场景4.2认证方式4.3认证协议4.4认证源五、授权(Au

热文推荐