Vue的进阶使用--模板语法应用拓展(表单及组件通信)

news2024/11/24 9:55:46

目录

​编辑

一.事件处理器

1.监听事件

1.1首先定义监听事件,并定义调用的方法

1.2编写调用的方法

案例演示 

1.编写HTML层

2.编写方法

2.Vue.js阻止重复请求

2.1模拟请求操作

2.2 测试结果及结论

二.表单验证 

1.基础表单验证

1.1 HTML层

1.2JS层

2.流程介绍

三.组件通信

1.自定义组件

1.1简单代码演示

1.2 自定义组件传参---父传子 

1.3自定义组件传参---子传父


本篇博客将带你深入了解Vue.js模板语法的应用和强大功能

互关三连111感谢大家的支持😋

🍿🍿🍿📮📮📮

一.事件处理器

1.监听事件

通过@click监听DOM事件并触发相应的方法

1.1首先定义监听事件,并定义调用的方法

<div @click="fun1">

1.2编写调用的方法

new Vue({
	el:"#app",
	methods: {
		fun1() {
			alert("fun1")
			},
		})

上述为普通的事件处理的方式定义的监听事件,当我们在开发过程中,使用Vue.js时,在写实际功能需求遇到会影响牵扯到其他功能时我们需要在处理事件后加上.stop避免影响其他功能的使用

案例演示 

1.编写HTML层
<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>

我们将前端的四个方法一层一层得包裹,模拟在调用方法时会调用其他方法,在实际开发中我们添加功能有时候避免不了

2.编写方法
new Vue({
				el:"#app",
				data(){
					return {
						msg:'hello Vue',
					};
				},
				methods: {
					fun1() {
						alert("fun1")
					},
					fun2() {
						alert("fun2")
					},
					fun3() {
						alert("fun3")
					},
					fun4() {
						alert("fun4")
					},
				},
			})

未处理事件前的演示效果

 当我们对其进行添加.stop进行处理后

<div class="four" @click.stop="fun4"></div>

由图可得知,在我们进行处理之后,并不会重复调用其他方法 

2.Vue.js阻止重复请求

众所周知,不断向服务器发送请求会对服务器造成很大压力,一些不法分子利用非法手段不断重复发送请求有可能导致服务器崩溃,所以我们在开发过程中要很重视这方面的问题,以下就是通过Vue.js如何阻止其操作

2.1模拟请求操作

<div id="app">
	<input :value="msg"/>
	<button @click="clickMe">发送</button>
</div>
new Vue({
	el:"#app",
	data(){
	    return {
			msg:'hello Vue',
				};
			},
		methods: {
			clickMe(){
				console.log("发送请求")
				}
			},
		})

2.2 测试结果及结论

模拟当我们在点击按钮发送请求时,后台响应,这里我们并没有做任何的处理操作

当我们对其进行处理操作时,在点击的事件中添加.once,对其进行阻止

<button @click.once="clickMe">发送</button>

由测试结果可以得知,当我们不断点击发送请求时,后台只打印了一次,也就是会响应一次,当然在实际开发中不能只单纯得这么写,我们需要进行多重验证数据是否回显展示到前台才进行此操作

二.表单验证 

1.基础表单验证

1.1 HTML层

<div id="app">
			姓名:<input name="name" v-model="name"/> <br />
			密码:<input name="password" v-model="pwd"/> <br />
			性别:<span v-for="s in sexList">
				<input type="radio" name="sex" v-model="sex" :value="s.id"/>{{s.name}}
			</span><br/>
			籍贯:<select name="myAddr" v-model="myAddr">
				<option v-for="a in address" :value="a.id">{{a.name}}</option>
			</select><br/>
			爱好:<span v-for="h in hobby" >
				<input type="checkbox" v-model="myLike" v-for="myLike" name="myLike" :value="h.id"/>{{h.name}}
			</span><br/>
			个人简介:<textarea v-model="sign" cols="10" rows="5"></textarea>
			同意:<input type="checkbox" v-model="ok"/><br />
			<button v-show="ok" @click="dosub">提交</button>
		</div>

1.2JS层

new Vue({
				el:"#app",
				data(){
					return {
						name:'YU',
						pwd:'123456',
						sexList:[
							{
								name:'男',id:1
							},{
								name:'女',id:2
							},{
								name:'未知',id:3
							},
						],
						sex:1,
						hobby:[{
							name:'唱',id:1
						},{
							name:'跳',id:2
						},{
							name:'Rap',id:3
						},{
							name:'篮球',id:4
						},],
						myLike:[],
						myAddr:1,
						address:[{
							name:'湖南',id:1
						},{
							name:'江西',id:2
						},{
							name:'云南',id:3
						},{
							name:'四川',id:4
						}],
						sign:null,
						ok:false,
					};
				},
				methods: {
					dosub(){
						var obj ={};
						obj.name = this.name;
						obj.pwd = this.pwd;
						obj.sex = this.sex;
						obj.address = this.myAddr;
						obj.love = this.myLike;
						obj.sign = this.sign;
						console.log(obj)
					}
				},
			})

2.流程介绍

  1. 在 HTML 中,有一个 div 元素,id 属性为 "app",它将成为 Vue 实例的根元素。在这个 div 内部,我们定义了一个表单,包含各种表单元素和绑定的数据。

  2. Vue 实例通过 new Vue() 创建,并指定 el 选项,将实例挂载到 id 为 "app" 的元素上。

  3. data 属性中,我们定义了多个响应式的数据属性,包括 namepwdsexListsexhobbymyLikemyAddraddresssignok

  4. namepwd 分别绑定到姓名和密码的输入框上,使用 v-model 指令实现双向绑定。

  5. sexList 是一个包含不同性别选项的数组,通过 v-for 在页面上循环渲染单选框,并使用 v-model 将选中的值绑定到 sex 属性上。

  6. address 是一个包含不同籍贯选项的数组,通过 v-for 在下拉菜单中循环渲染选项,并使用 v-model 将选中的值绑定到 myAddr 属性上。

  7. hobby 是一个包含不同爱好选项的数组,通过 v-for 在页面上循环渲染复选框,并使用 v-model 将选中的值添加到 myLike 数组中。

  8. sign 是一个文本域,使用 v-model 实现对个人简介的双向绑定。

  9. ok 是一个复选框,使用 v-model 绑定到 ok 属性上,用于表示是否勾选了同意。

  10. 提交按钮使用 v-show 指令,只有在勾选了同意时才显示,点击按钮时触发 dosub 方法。

  11. dosub 方法将表单数据存储到一个对象 obj 中,并在控制台打印出来。

这样,用户在填写表单时,数据会与 Vue 实例中的属性进行绑定。当用户点击提交按钮时,dosub 方法将收集所有数据并将其打印到控制台。

以上就是利用Vue.js做的基础表单验证的方式,在实际开发需要获取数据库中的数据及进行一个前端的非空校验与后台进行交互

三.组件通信

1.自定义组件

在Vue中,我们可以自定义组件来封装可重用的UI元素或功能模块。自定义组件可以由Vue实例所管理,具有自己的模板、数据、方法和生命周期钩子

1.1简单代码演示

<body>
		<div id="app">
			<my-button></my-button>
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				components: {
					'my-button':{
						template:'<button>自定义组件</button>'
					}
				},
			})
		</script>
	</body>

1.2 自定义组件传参---父传子 

(1)组件创建

new Vue({
				el:"#app",
				components: {
					'my-button':{
						props:['y'],
						template:'<button @click="clickMe">{{y}}点击了{{n}}次</button>',
						data:function(){
							return {
								n:1
							}
						},
						methods: {
							clickMe() {
								this.n++
							}
						},
					}
				},
			})

(2)组件传参

<div id="app">
			<my-button></my-button>
			<p>组件通信-父传子</p>
			<my-button y='YU'></my-button>
		</div>

流程解释 :

我们在第二个标签中通过prop属性对自定义组件进行传入参数y,并在模板定义中设置了内容"{{y}}点击了{{n}}次"

初始化属性n,定义了一个可以进行累加的方法,通过@click绑定了clickMe方法在点击时属性n进行累加

传参解释:

在父组件中,可以通过设置属性的方式向子组件传递数据

<my-button y='YU'></my-button>

子组件可以通过props属性接收父组件传递的数据,并在模板中使用。

props: ['y'],

子组件使用props属性声明了一个名为y的属性,用于接收来自父组件的数据。

效果演示

1.3自定义组件传参---子传父

(1)组件创建

new Vue({
				el:"#app",
				components: {
					'my-button':{
						props:['y'],
						template:'<button @click="clickMe">{{y}}</button>',
						data:function(){
							return {
								
							}
						},
						methods: {
							clickMe() {
								let name = "YU"
								let hobby = "Java"
								this.$emit('xxx',name,hobby)
							}
						},
					}
				},
				methods:{
					getParam(a,b){
						console.log(a,b)
					}
				}
			})

(2)组件传参

<my-button y="YU" @xxx='getParam'></my-button>

在Vue实例中,注册了my-button组件,并在组件定义中使用了props属性来接收父组件传递的y属性。模板中使用了双大括号语法将该属性的值显示在按钮上。在clickMe方法中,通过this.$emit触发了自定义事件xxx,并将namehobby作为参数传递给父组件。

在Vue实例的methods属性中定义了getParam方法,用于处理子组件传递的参数。在这个示例中,getParam只在控制台打印了传递的参数值。

这样,当子组件中的按钮被点击时,将触发自定义事件xxx,并将namehobby作为参数传递给父组件的getParam方法。

请注意,对于子组件向父组件传递数据,我们使用了自定义事件来实现。父组件通过监听子组件的自定义事件,从而获取子组件传递的数据

效果演示 

今天的分享到这里就结束了,感谢各位大大的观看,各位大大的三连是博主更新的动力,感谢谢谢谢谢谢谢谢谢各位的支持!!!!! 

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

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

相关文章

数字经济水平测算(内含4种版本2种方式)-地级市(2011-2021年)

参照赵涛等&#xff08;2020&#xff09;的文章&#xff0c;利用熵值法和主成分对城市数字经济水平进行测算&#xff0c;包括原始数据及测算结果。内含4种版本2种方式&#xff0c;在8种情况下测算的数字经济水平。 一、数据介绍 数据名称&#xff1a;地级市-数字经济水平测算…

栈的简单应用(利用Stack进行四则混合运算)(JAVA)

目录 中缀表达式转后缀表达式 图解 代码实现过程&#xff1a; 完整代码&#xff1a; 利用后缀表达式求值&#xff1a; 完整代码&#xff1a; 首先我们得先了解逆波兰表达式。 中缀表达式转后缀表达式 所谓的中缀表达式其实就是我们平时写的例如&#xff1a;&#xff1…

基于SpringBoot的墙绘产品展示交易平台设计与实现

目录 前言 一、技术栈 二、系统功能介绍 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本墙绘产…

生活垃圾数据集(YOLO版)

文章目录 1、数据集介绍1.1、数据集图片组成2.1、获取数据集方式 2、扩展代码2.1、文件结构树2.2、划分数据集2.3、获取数据集文件名字2.4、文件成功对应检测 3、其他文章 1、数据集介绍 1.1、数据集图片组成 【有害垃圾】&#xff1a;电池&#xff08;1 号、2 号、5 号&…

TensorFlow安装 ,在原本的虚拟环境下配置Tensorflow.

1.TensorFlow安装 &#xff0c;在原本的虚拟环境下配置Tensorflowh和pytorch 2.我首先在anaconda的环境下创建了一个tensorflow文件夹 如何先进入D盘&#xff0c;再进入tensorflow文件夹的目录D:cd D:\Anaconda\TensorFlowSoftWarepip install tensorflow如图所示报错解决方法 …

软件设计师考试学习2

数据结构与算法基础 数组 稀疏矩阵 用代入法计算&#xff0c;A 数据结构的定义 非线性结构分为树和图&#xff0c;区别在于有没有环路 顺序表与链表 引入头节点可以使所有的节点处理方式一致 如果没有空的头节点&#xff0c;头节点需要单独处理 顺序存储与链式存储 查找…

文件操作(2)

目录 文件操作的步骤&#xff1a; 流&#xff1a; 标准流&#xff1a; 文件指针&#xff1a; 文件信息区&#xff1a; 概念&#xff1a; 关系转化&#xff1a; 注意&#xff1a; 文件指针&#xff1a; 文件的打开和关闭&#xff1a; 打开方式&#xff1a; 打开成…

虹科方案 | LIN/CAN总线汽车零部件测试方案

文章目录 摘要一、汽车零部件测试的重要性&#xff1f;二、虹科的测试仿真工具如何在汽车零部件测试展露头角&#xff1f;三、应用场景**应用场景1&#xff1a;方向盘开关的功能测试****应用场景2&#xff1a;各类型电机的控制测试****应用场景3&#xff1a;RGB氛围灯的功能测试…

基于STM32+华为云IOT设计的智能门禁系统

一、项目介绍 智能门禁系统是一种应用物联网技术的智能化安防系统&#xff0c;提供安全高效的门禁管理和远程监控功能。传统的门禁系统通常使用磁卡、密码或钥匙等方式进行开锁&#xff0c;但存在易丢失、易复制、操作繁琐等问题。为了解决这些问题&#xff0c;并提高门禁安全…

postman-pre-request-scripts使用

一、场景 二、定义模拟接口 using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SaaS.Framework.DataTransfer; using System.Threading.Tasks;namespace SaaS.KDemo.Api.Controllers {[Route("api/[co…

引领初创企业的数字化转型:选择适合的低代码平台

初创企业在初期各项架构都还不完善&#xff0c;对于应用程序的需求多样&#xff0c;但是又要考量成本。所以&#xff0c;低代码平台就是在综合考量成本和需求的情况下的一个突出的选择。下面我们就六个方面为您介绍&#xff1a;初创企业选择的Zoho Creator低代码平台。 1、功能…

PREEvision Client 10.8.0

PREEvision Client 10.6.0 2692407267qq.com&#xff0c;更多内容请见http://user.qzone.qq.com/2692407267/

php代码审计篇熊海cms代码审计

文章目录 自动审计逐个分析首页index.php文件包含漏洞后台逻辑漏洞cookie绕过登录后台sql报错注入存储型XSS 结束吧 自动审计 看到有很多 逐个分析 首页index.php文件包含漏洞 读一下代码&#xff0c;可以看到很明显的一个文件包含 <?php //单一入口模式 error_repor…

(1) ESP32获取图像,并通过电脑端服务器显示图像

目录​​​​​​​ 一、所需器件工具 二、客户端与服务器进行UDP通信 1、客户端代码 2、服务器端代码 3、效果展示 三、客户端拍照&#xff0c;通过UDP传输到服务器进行显示 1、客户端获取图像并UDP传输 2、电脑端服务器显示图像 3、效果展示 四、代码链接 一、所需器…

高压放大器电源有什么作用和用途

高压放大器是一种专门用于放大高压信号的电子设备。它可以将低幅度的输入信号放大成高幅度的输出信号&#xff0c;用于驱动高压负载或处理高压信号。然而&#xff0c;高压放大器需要特定的电能来运行&#xff0c;而这就是电源的作用。 高压放大器电源的主要作用是为高压放大器提…

Python入门教程 | Python 命名空间和作用域

命名空间 先看看官方文档的一段话&#xff1a; A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries。 中文翻译&#xff1a;命名空间(Namespace)是从名称到对象的映射&#xff0c;大部分的命名空间都是通过 P…

投资理财五大定律

大家好&#xff0c;我是财富智星&#xff0c;今天跟大家分享一下理财的五大定律&#xff0c;一起来学习吧。 一、投资理财&#xff0c;别把鸡蛋放一个篮子里 投资理财&#xff0c;不要把所有的资金都放在同一个理财产品中。应该了解市场上各种理财产品的风险、收益、周期和起买…

古代有没有电子元器件?

手机&#xff0c;电脑&#xff0c;电视等等电子产品&#xff0c;无时无刻充斥在我们的生活中&#xff0c;如果有一天突然没有了这些功能多样的电子产品&#xff0c;估计大部分人都会一时之间难以适应。 这就好比正在上网&#xff0c;结果突然被人断了网&#xff0c;导致无网络连…

Linux实现HTTP服务器

在Linux系统中&#xff0c;我们可以利用HTTP服务器代理来实现网络请求的转发和加速&#xff0c;从而提高网站的访问速度和性能。本文将为您详细介绍如何搭建HTTP服务器代理&#xff0c;让您在网络世界中畅通无阻&#xff0c;更加快速高效地进行数据通信。 一、了解HTTP服务器代…

下载水果FLStudio21.2软件安装更新教程

编曲是一种对音乐创作过程中涉及的元素和步骤进行组织和安排的艺术形式。对于想要学习编曲的人来说&#xff0c;以下是一些有用的建议&#xff1a; 1. 学习基础知识 在开始学习编曲之前&#xff0c;你需要掌握一些基础知识&#xff0c;例如音乐理论、乐器演奏和数字音乐制作技…