Vue模板语法(下)

2023-09-20 11:34:49

事件处理器

<!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://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<style>
			.pink{
				width: 400px;
				height: 400px;
				background-color: pink;
			}
			.orange{
				width: 300px;
				height: 300px;
				background-color: orange;
			}
			.blue{
				width: 200px;
				height: 200px;
				background-color:rebeccapurple;
			}
			.green{
				width: 100px;
				height: 100px;
				background-color: green;
			}
		</style>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>冒泡事件</p>
			<div class="pink" @click="pink">
				<div class="orange" @click="orange">
					<div class="blue" @click="blue">
						<div class="green" @click.stop="green"></div>
					</div>
				</div>
			</div>
			<p>点击夸你</p>
			<button @click.once="dosub">提交</button>
	</body>
	<script type="text/javascript">
		// 绑定边界	ES6具体体现
		new Vue({
			el: '#app',
			data() {
				return {
					f200: 'f200'
				};
			},
			methods: {
				pink() {
					alert("pink");
				},
				orange() {
					alert("orange");
				},
				blue() {
					alert("blue");
				},
				green() {
					alert("green");
				},
				dosub(){
					alert("兄弟,点的好");
				}
			}
		})
	</script>
</html>

冒泡事件

 

 阻止事件冒泡

 

 事件只能单击一次

什么是事件冒泡?

冒泡事件是指在Web开发中的事件传播过程中,事件从DOM树的最底层元素(通常是最具体的元素)向上冒泡到DOM树的根节点的过程。这种事件传播模型允许开发者在更高层次的元素上监听和处理事件,而不需要在每个具体的元素上都添加事件处理程序。

冒泡事件的传播过程可以简要描述如下:

  1. 事件首先从触发它的元素开始,然后向上冒泡到DOM树的根节点。
  2. 在这个过程中,每个祖先元素都有机会捕获并处理事件,如果它们注册了相应的事件处理程序。
  3. 如果事件处理程序返回true,事件将继续冒泡,直到到达根节点。
  4. 如果事件处理程序返回false或没有返回值,事件将停止冒泡,不会继续向上传播。

冒泡事件允许开发者在父元素上注册事件处理程序,以便捕获子元素触发的事件,从而提高了事件处理的效率和可维护性。

 

 表单的综合案例

<!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>
</head>
<body>
  <div id="app">
    姓名:<input name="name" v-model="name"/><br />
    密码:<input type="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" name="myLike" :value="h.id"/>{{h.name}}
    </span><br />
	
	
    简介:<textarea v-model="sign" cols="20" rows="2"></textarea><br />
    是否同意:<input type="checkbox" v-model="ok"/><br />
    <button v-show="ok" @click="dosub">提交</button>
  </div>
  <script type="text/javascript">
    new Vue({
      el:'#app',
      data(){
        return {
          name:'',
          pwd:'',
          sexList:[
            { name:'男', id:1 },
            { name:'女', id:2 },
            { name:'不详', id:3 }
          ],
          hobby:[
            { name:'唱', id:1 },
            { name:'跳', id:2 },
            { name:'Rap', id:3 },
            { name:'篮球', id:4 }
          ],
          myLike:[],
          address:[
            { name:'湖南', id:1 },
            { name:'湖北', id:2 },
            { name:'河南', id:3 },
            { name:'河北', id:4 }
          ],
          myAddr:null,
          sign:null,
          ok:false,
          sex:null 
        };
      },
      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);
        }
      }
    });
  </script>
</body>
</html>

 效果图:

 组件通信

自定义事件

   监听事件:$on(eventName)

   触发事件:$emit(eventName)

   注1:Vue自定义事件是为组件间通信设计  

        vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定

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

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

   注2:事件名

        不同于组件和prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称

        建议使用“短横线分隔命名”,例如:three-click

 自定义组件

<!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>
	</head>
	<body>
		<div id="app">
			<p>自定义组件</p>
			<my-<button type="button">liao</button>
			</div>
			
		<script type="text/javascript">
			new Vue({
				el:'#app',
				components:{
					'mybutton':{
						template:'<button>xx</button>'
					}
				},
				data(){
					return {
						msg:'123'
					};
				},
				methods:{
					fun1(){
						alert("fun1");
					}
				}
			});
		</script>
	</body>
</html>

效果图:

 组件通信父传子

<!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>
	</head>
	<body>
		<div id="app">
			<p>自定义组件</p>
			<button type="button">liao</button><br />
			
			
			<p>组件通信——父传子</p>
			<my-button m="纸"></my-button>
			
			
			<p>组件通信——父传子(纸)</p>
			<my-button m="翔" n="10"></my-button>
		</div>
			
		<script type="text/javascript">
			new Vue({
				el:'#app',
				components:{
					'my-button':{
						props:['m','n'],
						template:'<button @click="clickMe">被{{m}}点击了{{n}}次</button>',
						data:function(){
							return {
								n:1
							}
						},
						methods:{
							clickMe(){
								this.n++;
							}
						}
					}
				},
			});
		</script>
	</body>
</html>

 效果图:

 组件通信子传父

<!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>
	</head>
	<body>
		<div id="app">
			<p>组件通信——子传父</p>
			<my-button m="料" n="10" @xxx='getParam'></my-button>
		</div>
			
		<script type="text/javascript">
			new Vue({
				el:'#app',
				components:{
					'my-button':{
						props:['m','n'],
						template:'<button @click="clickMe">被{{m}}点击了{{n}}次</button>',
						data:function(){
							return {
								count:1
							}
						},
						methods:{
							clickMe(){
								let name = '来了';
								let bname = '开始来了';
								let info = '我tm来了';
								this.$emit('xxx', name, bname, info);
							}
						}
					}
				},
				data(){
					return {
						msg:'1234'
					};
				},
				methods: {
					getParam(a, b, c){
						console.log(a, b, c);
					}
				}
			});
		</script>
	</body>
</html>

 

 效果图:

更多推荐

Apache Hive概述,模拟实现Hive功能,Hive基础架构

1、ApacheHive概述1.1、分布式SQL计算对数据进行统计分析,SQL是目前最为方便的编程工具。大数据体系中充斥着非常多的统计分析场景所以,使用SQL去处理数据,在大数据中也是有极大的需求的。MapReduce支持程序开发(Java、Python等)但不支持SQL开发1.2、分布式SQL计算-HiveApach

探索Adobe Photoshop 2024:新功能与增强功能详解

AdobePhotoshop2024,这款传奇的图像编辑软件,近期又迎来了一些令人振奋的新特性。对于专业设计师和摄影爱好者来说,Photoshop的每次更新都牵动着他们的心。那么,这次的新版本究竟带来了哪些值得我们期待的功能呢?且听我一一解读。首先,Photoshop2024对其界面进行了一些改进。全新的工作区布局,使

Layui快速入门之第七节 表格

目录一:基本用法基本案例:二:静态表格三:模板配置渲染四:静态表格转换五:已知数据渲染六:自定义模板API渲染一:基本用法表格组件table是Layui中使用率极高的一个组件,它以表格的承载方式对数据进行渲染、重载、排序、统计、分页等等一系列交互操作,并提供了丰富的API用于扩展,基本涵盖了日常业务所涉及的大部分需求基

【pytorch】模型常用函数(conv2d、linear、loss、maxpooling等)

1、二维卷积函数——cnv2d():'''in_channels(int):输入通道数out_channels(int):输出通道数kernel_size(intortuple):卷积核大小stride(intortuple,optional):步长Default:1padding(int,tupleorstr,opt

驱动开发 作业 day9 9/20

基于platform实现head.h#ifndef__HEAD_H__#define__HEAD_H__//构建LED开关的功能码,不添加ioctl第三个参数#defineLED_ON_IO('l',1)#defineLED_OFF_IO('l',0)#endiftest.c#include<stdlib.h>#inc

docker 获取Nvidia 镜像 | cuda |cudnn

本文分享如何使用docker获取Nvidia镜像,包括cuda10、cuda11等不同版本,cudnn7、cudnn8等,快速搭建深度学习环境。1、来到dockerhub官网,查看有那些Nvidia镜像https://hub.docker.com/r/nvidia/cuda/tags?page=2&name=11.3这

Spring Cloud Eureka:服务注册与发现

💗wei_shuo的个人主页💫wei_shuo的学习社区🌐HelloWorld!SpringCloudEureka:服务注册与发现SpringCloudEureka是SpringCloud生态系统中的一个组件,它是用于实现服务注册与发现的服务治理组件。在微服务架构中,服务之间存在复杂的依赖关系,而SpringCl

安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR下级海康设备无法级联是什么原因?

安防视频监控平台/视频集中存储/云存储/磁盘阵列EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。有用户反馈,在使用下级平台的海康设备级联到视频监控EasyCVR平台

游戏服务器搭建过程中Maven多模块编译遇到的一些问题

目录1、多模块的创建1.1父模块的创建1.2删除垃圾文件1.3修改pom.xml1.4创建子模块继承2、子模块之间的互相引用3、多个模块间版本的管理3.1dependencis3.2dependencyManagement4、依赖执行5、在SpringBoot项目中加载依赖项目的组件有几种常用的方法5.1.使用@Com

ip地址怎么改网速快

在当今高度依赖互联网的时代,快速稳定的网络连接对于人们的生活和工作至关重要。然而,有时我们可能会遇到网络速度缓慢的问题。虽然更改IP地址并不能直接影响网络速度,但它可以成为改善网络连接的一种策略之一。虎观代理小二二将探讨如何通过更改IP地址来尝试提升网络速度,并提供一些实用的方法与建议。请注意,网络速度受多个因素影响,

MongoDB简介以及安装

文章目录1.MongoDB简介2.NoSQL简介3.MongoDB安装1.MongoDB简介MongoDB是一种NoSQL数据库,采用了文档数据库模型。它以BSON(BinaryJSON)格式存储数据,支持动态模式和灵活的查询语言。MongoDB具有以下特点:文档存储:MongoDB以文档(Document)的形式存储

热文推荐