Vue的第三章节之模版语法下篇(带你感受来自Vue模版语法的魅力)

news2024/11/6 9:56:18

目录

​编辑

前言

一、事件处理器

1. 事件冒泡模拟及处理方式

1.1 模拟

1.2 处理方式

1.3 事件冒泡模型图

2. 事件修饰符

3. 事件修饰符的使用

案例模拟使用

二、表单的综合案例(在控制台输出结果)

1. 模拟案例测试

代码

效果

三、 Vue之自定义组件

2.1 什么是自定义组件

2.2 自定义组件的基础使用

示例1:

2.3 利用Vue的自定义组件开发的好处

2.4  应用场景

2.5 组件通信案例(自定义组件示例使用)

案例一:自定义组件

代码

页面效果

案例二:父传子

情况1:传单个参数

代码:

页面效果

情况2:传多个参数,带函数

代码

 页面效果

案例三:子传父

代码

页面效果


前言

        在上一期模版语法上篇的博客中我与各位老铁分享了有关Vue语法的知识点,例如:插值、指令、过滤器、动态传参等等。今天这期模版语法下篇的博客我继续为各位老铁带来分享有关Vue语法的知识点,今天分享的内容有事件处理器、表单综合案例讲解、组件通信。希望能给各位老铁带来收获与帮助,也感谢各位老铁的大力支持。

一、事件处理器

        主要处理的是事件冒泡,就是点击一个事件,不仅会触发该事件而且还会触发其他事件,在项目中这是比较严重的问题所在,下面所示是我所模拟的事件冒泡。

1. 事件冒泡模拟及处理方式

1.1 模拟

 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<title>Vue-事件处理器</title>
		<style type="text/css">
			.one{
				height: 400px;
				width: 400px;
				background-color: pink;
			}
			.two{
				height: 300px;
				width: 300px;
				background-color: green;
			}
			
			.three{
				height: 200px;
				width: 200px;
				background-color: blue;
			}
			
			.four{
				height: 100px;
				width: 100px;
				background-color: yellow;
			}
		</style>
	</head>
	<body>
		<div id="app">
			
			<div 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 {
						
					}
				},methods: {
					fun1() {
						alert("fun1");
					},fun2() {
						alert("fun2");
					},fun3() {
						alert("fun3");
					},fun4() {
						alert("fun4");
					}
				},
			});
			
		</script>
	</body>
</html>

效果

1.2 处理方式

        在指定的事件处加上一个.stop即可,该事件涉及多个事件的触发时就不会出现冒泡事件出现。效果展示(如下图)

 解决代码

解决后的效果

        当然在项目中不一定要全部解决所有的事件冒泡,根据自身的项目需求去调整。

1.3 事件冒泡模型图

2. 事件修饰符

        在Vue中,事件修饰符是用于修改事件触发行为的特殊修饰符。可以在触发事件时使用修饰符来改变事件的默认行为或添加额外的功能。

Vue之事件修饰符
事件修饰符说明
.stop阻止事件冒泡,即停止事件传播到父元素。
.prevent阻止事件的默认行为,比如阻止表单提交或是链接跳转。
.capture事件以捕获模式触发,即先触发子元素的事件再触发父元素的事件。
.self只在事件目标自身触发时才触发事件处理器,而不是冒泡阶段。
.once事件只触发一次,即事件处理器只会执行一次。
.passive指示浏览器事件监听器不应阻止事件的默认行为。此修饰符主要用于提高页面的滚动性能。

3. 事件修饰符的使用

案例模拟使用

<template>
  <button v-on:click.stop="handleClick">点击我</button>
</template>

<script>
export default {
  methods: {
    handleClick() {
      // 处理点击事件的逻辑
    }
  }
}
</script>

        在上面的例子中,事件处理器handleClick绑定到按钮的click事件上,并使用.stop修饰符阻止事件冒泡。

        除了上述修饰符,Vue还提供了其他一些事件修饰符,可以根据具体需求来选择使用。同时,也可以组合多个修饰符来达到更灵活的事件处理效果。

二、表单的综合案例(在控制台输出结果)

1. 模拟案例测试

代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<title>Vue-表单综合案例</title>
		
	</head>
	<body>
		<div id="app">
			<h1>君易信息网</h1>
			姓名:<input name="name" v-model="name"/><br />
			电话:<input type="tel" v-model="tel"/><br />
			性别:<span v-for = "s in sexlist">
				<input type="radio" name="sex" v-model="sex" :value="s.id"/>{{s.name}}
			</span>
			<br />
			籍贯:<select name="address" v-model="myaddress">
				<option v-for="add in address" :value="add.id">{{add.name}}</option>
			</select>
			<br />
			爱好:<span v-for="h in hobby">
				<input type="checkbox"  v-model="mylove" name="mylove" :value="h.id"/>{{h.name}}
			</span>
			<br />
			个人简介:<textarea  v-model="sign" cols="10" rows="5">
			</textarea>
			<br />
			<input type="checkbox" v-model="ok">同意协议
			<br />
			  <button v-show="ok" @click="yijao()">提交</button>
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return {
						name:'曦曦',//姓名
						tel:'17337952151',//电话
						sexlist:[{
							name:'男',id:1
						},{
							name:'女',id:2
						}],
						sex:1,//性别
						hobby:[{//爱好
							name:'睡觉',id:1
						},{
							name:'吃美食',id:2
						},{
							name:'看电视剧',id:3
						},{
							name:'喜欢木易',id:4
						}],
						mylove:[],//我的爱好
						address:[{//地址
							name:'湖南',id:1
						},{
							name:'河南',id:2
						},{
							name:'河北',id:3
						},{
							name:'湖北',id:4
						}],
						myaddress:null,//我的地址
						sign:null,//个人简介
						ok:false
					}
				},methods:{
					yijao(){
						var obj={};
						obj.name=this.name;
						obj.tel=this.tel;
						obj.sex=this.sex;
						obj.address=this.myaddress;
						obj.hobby=this.mylove;
						obj.sign=this.sign;
						console.log(obj);
						
					}
				}
			});
			
		</script>
	</body>
</html>

效果

         这个是我简单模拟的一个表单验证,可以由动图得知,只有在勾选了同意协议的选项时才会显示提交按钮,将数据传到我定义好的一个JSON对象中储存,在控制台输出。

        我们可以将相关的融入到我们的项目中,例如在前端的登陆注册界面中可以使用、后端的身份验证等等的场景中应用。这其中涉及到了Vue中的自定义组件的使用相关知识点。

三、 Vue之自定义组件

2.1 什么是自定义组件

        在Vue中,自定义组件是一种由开发者自行定义和组装的可复用的Vue实例。它可以包含自己的模板、样式和逻辑,并且可以在Vue应用中多次使用。

        自定义组件可以与内置组件一样在模板中使用,并且可以接受属性(props)、发出事件(emits)和拥有自己的生命周期钩子。通过组合多个自定义组件,我们可以构建复杂的用户界面。

2.2 自定义组件的基础使用

        要创建一个自定义组件,你可以通过Vue的component方法全局注册组件,也可以在Vue实例的components选项中局部注册组件。然后,在模板中使用组件标签来引用该组件。在自定义组件内部,你可以通过声明props选项来接收传入的属性,并且可以通过$emit方法来触发事件。

示例1:

<template>
  <div>
    <h2>{{ title }}</h2>
    <button @click="incrementCounter">{{ buttonText }}</button>
  </div>
</template>

<script>
export default {
  props: {
    title: String,
    buttonText: {
      type: String,
      default: 'Click me'
    }
  },
  methods: {
    incrementCounter() {
      this.$emit('increment')
    }
  }
}
</script>

        在上面的代码中,我们创建了一个名为MyComponent的自定义组件,它接受一个title属性和一个可选的buttonText属性。组件内部有一个按钮,当点击按钮时,会触发increment事件

         要在Vue应用中使用这个自定义组件,我们可以在模板中使用<my-component>标签,并通过属性来传递数据和监听事件:

<template>
  <div>
    <my-component :title="componentTitle" :button-text="componentButtonText" @increment="handleIncrement"></my-component>
  </div>
</template>

<script>
import MyComponent from './MyComponent.vue'

export default {
  components: {
    MyComponent
  },
  data() {
    return {
      componentTitle: 'My Custom Component',
      componentButtonText: 'Click to Increment'
    }
  },
  methods: {
    handleIncrement() {
      console.log('Counter incremented!')
    }
  }
}
</script>

        以上示例演示了如何在Vue中定义和使用自定义组件。通过自定义组件,我们可以创建可复用的Vue实例,实现代码的模块化和组件化,提高开发效率。

2.3 利用Vue的自定义组件开发的好处

Vue开发的优点

  1. 模块化开发:自定义组件将一个复杂的应用分解为多个独立的模块,每个模块负责特定的功能。这种模块化的开发方式可以提高代码的可维护性和可复用性,使开发工作更具有组织性。

  2. 代码重用:自定义组件可以在应用的不同地方多次使用,减少了重复编写相似代码的工作量。通过将常用的UI元素封装为组件,可以提高开发效率,并确保相同的UI元素在整个应用中保持一致。

  3. 可组合性:自定义组件可以与其他组件进行组合,形成更复杂、更丰富的应用界面。通过组合和嵌套组件,可以轻松构建出功能强大的用户界面,实现代码的可扩展性。

  4. 封装性:自定义组件可以将自己的模板、样式和逻辑封装起来,与其他组件或应用的其他部分相互隔离。这种封装性可以防止组件内部的实现细节对外部产生影响,提高代码的可维护性和可测试性。

  5. 可维护性:通过自定义组件,开发人员可以更好地组织代码,使其更易于理解和维护。每个组件都有自己的生命周期和状态管理,使得代码的逻辑清晰可见,方便进行调试和修改。

2.4  应用场景

Vue自定义组件的应用场景
应用场景说明
复杂UI界面对于复杂的界面和布局,使用自定义组件可以将其分解为多个可复用的小组件,使代码更具组织性和可维护性。
表单处理表单通常包含多个输入字段和验证逻辑,使用自定义组件可以将每个输入字段封装为一个独立的组件,方便统一管理和复用验证逻辑。
列表和数据展示在需要展示大量数据或者列表的情况下,可以将每个数据项封装为一个自定义组件,并通过v-for指令动态创建多个组件实例。
模态框和弹窗自定义组件特别适用于模态框和弹窗的开发,可以将模态框的状态和行为封装在组件内部,提高代码的可读性和可复用性。
复用性较高的UI元素对于重复使用频率较高的UI元素,如导航栏、按钮、卡片等,使用自定义组件可以减少重复编写相似代码的工作量,实现代码的重用。
动态组件切换在一些需要动态切换内容的场景下,使用Vue的动态组件功能可以通过自定义组件的方式来实现组件间的切换。
插件和库开发

自定义组件可以用于开发Vue插件和库,将特定的功能封装成组件,方便其他开发者在其它项目中引入和使用。

2.5 组件通信案例(自定义组件示例使用)

案例一:自定义组件

代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<title>Vue-组件通信</title>
		
	</head>
	<body>
		<div id="app">
			<p>自定义组件</p>
			<my-button>xx</button>
			
			
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				components: {
					'my-button':{
						template:'<button>木易</button>'
					}
				},
				data(){
					return {
					}
				}
			});
			
		</script>
	</body>
</html>

创建组件

        创建组件的语法与我们前面博客中提到的过滤器的语法有些异曲同工之妙,几乎一样。

页面效果

案例二:父传子

情况1:传单个参数

代码:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<title>Vue-组件通信</title>
		
	</head>
	<body>
		<div id="app">
			
			<p>组件通信——父传子</p>
			<my-button m='曦曦'></button>
			
		
			
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				components: {
					'my-button':{
						props:['m'],
						template:'<button>{{m}}</button>'
					}
				},
				data(){
					return {
						
					}
				}
			});
			
		</script>
	</body>
</html>
页面效果

情况2:传多个参数,带函数

代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<title>Vue-组件通信</title>
		
	</head>
	<body>
		<div id="app">
		<!-- 	<p>自定义组件</p>
			<my-button>xx</button> -->
			
			<!-- <p>组件通信——父传子</p>
			<my-button m='曦曦'></button> -->
			
		    <p>组件通信——父传子2</p>
			<my-button m='曦曦' n=99></button>
			
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				components: {
					'my-button':{
						props:['m','n'],
						template:'<button @click="clickme()">想{{m}}{{n}}次了</button>',
						data() {
							return {
								n: 1
							}
						},
						methods: {
							clickme() {
								this.n++;
							}
						},
					}
				},
				data(){
					return {
						
					}
				}
			});
			
		</script>
	</body>
</html>
 页面效果

案例三:子传父

代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<title>Vue-组件通信--子传父</title>
		
	</head>
	<body>
		<div id="app">
			
		    <p>组件通信——子传父</p>
			<my-button m='曦曦' @xxx='getParam'></button>

		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				components: {
					'my-button':{
						props:['m'],
						template:'<button @click="clickme">想{{m}}了</button>',
						methods: {
							clickme() {
								var name='与木易';
								var action='度蜜月';
								var time='一万年';
								this.$emit('xxx',name,action,time)
							}
						},
					}
				},
				data(){
					return {
						
					}
				},methods: {
					getParam(a,b,c) {
						console.log(a,b,c);
					}
				}
			});
			
		</script>
	</body>
</html>

组件内部参数

页面效果

        这期关于Vue模版语法下篇的分享到这就结束了,希望老铁能三连加关注支持一波,谢谢啦。

 

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

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

相关文章

Vue模板语法(下)

事件处理器 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><script src"https://c…

内存利用:迟来的blindless与逃不掉的exit漏洞

0x01 前言 在计算机安全领域&#xff0c;漏洞的危险性往往与其广泛性和潜在攻击方式密切相关。今天&#xff0c;我们将深入探讨一个异常危险的漏洞&#xff0c;它存在于程序退出时执行的常见函数"exit"中。无论是在操作系统还是应用程序中&#xff0c;"exit&qu…

【Vue.js】快速入门与工作生命周期的使用

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》 《springMvc使用》 ⛺️ 生活的理想&#xff0c;为了不断更新自己 ! 目录 ​编辑 1.Vue是什么 2.Vue的特点及优势 3. 使用Vue的详细步骤 3.1.导入 3.2…

资源超分是什么?

经常听到资源超分&#xff0c;但是具体指的什么还不清楚&#xff0c;哪里来的术语 https://www.modb.pro/db/199368 3&#xff0e;超线程技术管理及如何开启 超线程是intel研发的技术&#xff0c;利用特殊的硬件指令&#xff0c;把一个物理CPU核模拟成两个逻辑内核&#xff…

点成案例丨温度梯度培养箱在探究温度对植物发芽影响中的应用

变暖的气候与受影响的种子 全球变暖是指由于人类工业化和燃烧化石燃料等活动释放了大量温室气体&#xff0c;这些气体进入大气层导致地球气温在过去几十年里逐渐升高的现象。全球气候变暖带来了一系列严重的环境问题&#xff1a;温度升高导致冰川和极地冰层融化&#xff0c;海…

中秋节要来了,程序猿的你还要加班吗

其他人的中秋节是这样的&#xff1a; 明月松间照&#xff0c;清泉石上流。 程序猿的中秋节是这样的&#xff1a; 明月几时有&#xff1f;把酒问青天。 首先&#xff0c;跟大家开个玩笑。希望中秋节的你&#xff0c;不要加班&#xff0c;毕竟身体是革命的本钱嘛。 中秋&…

初识 python 装饰器

1.什么是装饰器&#xff1f; 装饰器&#xff08;Decorator&#xff09;是Python中一种用于修改函数或类的行为的设计模式。装饰器允许您在不修改原始函数或类的情况下&#xff0c;给它们添加新的功能&#xff0c;这使得代码更具可重用性和可扩展性。简而言之&#xff0c;就是一…

17.适配器模式(Adapter)

意图&#xff1a;将一个类的接口转换为Client希望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类在一起工作。 UML图 Target&#xff1a;定义Client使用的与特定领域相关的接口。 Client&#xff1a;与符合Target接口的对象协同工作。 Adaptee&#xf…

华为OD机试 - 求最多可以派出多少支团队 - 双指针(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

Linux提权辅助工具Linux Exploit Suggester

Linux提权辅助工具Linux Exploit Suggester 1.概述2.工具使用3.已经有人二开了 1.概述 Linux Exploit Suggester是一款根据操作系统版本号自动查找相应提权脚本的工具 Linux Exploit Suggester的官方下载地址为https://github.com/PenturaLabs/Linux_Exploit_Suggester 2.工具…

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现 文章目录 1\. 伙伴系统的核心数据结构2\. 到底什么是伙伴3\. 伙伴系统的内存分配原理4\. 伙伴系统的内存回收原理5\. 进入伙伴系统的前奏5.1 获取内存区域 zone 里指定的内存水位线5.2 检查 zone 中剩余内存容量…

基于Java的公务员考试资料共享平台的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

JavaScript中常用的输入输出语句介绍

在日常开发中&#xff0c;为了方便数据的输入和输出&#xff0c;JavaScript提供了一些常用的输入输出语句&#xff0c;具体如表1-3所示。 表1常用的输入输出语句 接下来将分别演示document.write0、console.log0和promptO的使用。 1. document.write() document.write0的输出…

mysql大数据量 分页查询优化

最近我老表问我一个面试问题&#xff0c;如果数据量很大&#xff0c;分页查询怎么优化。 个人觉得无非就是sql优化&#xff0c; 那无非就是走索引&#xff0c; 避免回表查询&#xff08;覆盖索引&#xff0c;也就是不要用select * &#xff0c;走主键索引&#xff0c;叶子节点有…

基础算法--双指针算法

双指针算法 1.基本介绍 严格的来说&#xff0c;双指针只能说是是算法中的一种技巧。 双指针指的是在遍历对象的过程中&#xff0c;不是普通的使用单个指针进行访问&#xff0c;而是使用两个相同方向&#xff08;快慢指针&#xff09;或者相反方向&#xff08;对撞指针&#…

起底交易所JPEX:传销、诈骗,网红编织的香港加密新规第一案

香港的加密之火还在萌芽&#xff0c;就被迎头浇了一桶透心凉的冷水。 9月13日&#xff0c;香港证监会罕见点名一家虚拟资产平台JPEX&#xff0c;这也是自香港加密新规后&#xff0c;首个遭到红牌警告的虚拟资产交易所。 据证监会官网内容&#xff0c;JPEX通过社交媒体网红及场外…

MySQL进阶篇3-视图和存储过程以及触发器的学习使用

视图/存储过程&#xff08;函数&#xff09;/触发器 视图&#xff1a;由表动态生成&#xff0c;虚拟的表&#xff0c;保存的是sql的逻辑。 创建视图&#xff1a; ​ create [or replace] view viewName【列名列表】 as select 语句 [with [cascaded|local] check option] 修…

开源日报 0823 | NLP 民工的乐园:中文 NLP 资源库的终极指南

文章中介绍了几个非常有用的开源项目&#xff0c;适用于不同领域的开发者和研究者。其中&#xff0c;NLP 民工的乐园是一个非常全面的中文 NLP 资源库&#xff0c;提供了丰富的语料库、词库、词法工具和预训练语言模型&#xff0c;适用于不同的 NLP 相关任务。Poetry 是一个简化…

TOWE一转二家用无线遥控插座,让生活变得简单

随着科技的进步&#xff0c;人们的生活方式正在发生改变&#xff0c;越来越多的智能家居产品进入我们的生活中&#xff0c;为我们的生活带来了极大的便利。无线遥控插座作为一种集成了无线遥控技术与插座功能的创新产品&#xff0c;在家庭、办公、商业场景有着广泛的应用。同为…

q-learning强化学习使用基础

强化学习 通过策略的方式来学习&#xff0c;q-learing&#xff08;马尔科夫链模型&#xff09; 马尔科夫链&#xff1a;奖励*折扣因子&#xff0c;R(t)reward(1)yR(t1)&#xff0c;马尔可夫链多次迭代后分布趋于稳定所以可以得到最优解 q-learning 构建qtable&#xff0c;二…