Vue模板语法下集(03)

今日份分享内容

一、事件处理器 

1、阻止单击事件冒泡 

 2、只点击一次

 3、按键修饰符

 二、Vue自定义组件

1、组件简介 

2、自定义组件

 ①父传子(父组件 传参 给 子组件)

②子传父(子组件 传参 给 父组件)

三、表单综合案例


首先让我们来把页面搭建完毕,页面效果如图:

 页面代码块展示:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>1、事件处理器</title>
		<style type="text/css">
			.red{
				width: 400px;
				height: 400px;
				background-color: red;
			}
			.yellow{
				width: 300px;
				height: 300px;
				background-color: yellow;
			}
			.blue{
				width: 200px;
				height: 200px;
				background-color: blue;
			}
			.green{
				width: 100px;
				height: 100px;
				background-color: green;
			}
			
		</style>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<div class="red" @click="red">
				<div class="yellow"  @click="yellow">
					<div class="blue"  @click="bule">
						<div class="green"  @click="green"></div>
					</div>
				</div>
			</div>
		</div>
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
						msg:'hello,我是一杯咖啡!'
					}
				},
				methods:{
					red(){
						alert('red');
					},
					yellow(){
						alert('yellow');
					},
					bule(){
						alert('bule');
					},
					green(){
						alert('green');
					}
				}
			})
		</script>
	</body>
</html>

那么现在就正式进入今日的分享内容吧! 


一、事件处理器 

1、阻止单击事件冒泡 

 页面解析图:四个div嵌套而成 

如上图、代码所示,是由四个div标签嵌套而成的,四个div标签对应了四个颜色也分别对应了四个点击事件,点击不同的颜色会出现不同的弹出内容,由于使用div一个套着一个的,也就是由四个正方形叠加起来了,如果我点击最上面的绿色那么也就会从上到下依次弹出绿色>蓝色>黄色>红色四个点击事件所对应的内容,那么问题来了,如果只想让所点击的绿色弹出内容应该怎么办呢?

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

 <!-- 阻止单击事件冒泡 -->

  <a v-on:click.stop="doThis"></a>

什么是冒泡事件? 如图所示:

  

这样就只会触发绿色部分的点击事件了。 

 2、只点击一次

在客户使用某个查询功能的时候,当网络缓慢的时候,下意识的可能会多次点击那个查询的按钮,对于客户而言觉得并没什么,但是对于服务端来说,就有点类似于刻意攻击,因为当每点击一次按钮,就会向后台数据发送一次请求,就会抢占服务器的资源,那么我们作为开发者应该可以怎样做呢?

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

 <!--  事件只能点击一次 -->

  <a v-on:click.once="doThis"></a>

效果图展示:        点击确定之后就不会再弹出内容了

 3、按键修饰符

按键修饰符顾名思义也就是跟你的键盘绑定的事件。

例如回车键: 

效果展示:        光标移入文本框内点击回车键就可以弹出窗口。 

事件处理器的知识汇总 :

事件修饰符

 .stop

  .prevent

  .capture

  .self

  .once

  <!-- 阻止单击事件冒泡 -->

  <a v-on:click.stop="doThis"></a>

  <!-- 提交事件不再重载页面 -->

  <form v-on:submit.prevent="onSubmit"></form>

  <!-- 修饰符可以串联  -->

  <a v-on:click.stop.prevent="doThat"></a>

  <!-- 只有修饰符 -->

  <form v-on:submit.prevent></form>

  <!-- 添加事件侦听器时使用事件捕获模式 -->

  <div v-on:click.capture="doThis">...</div>

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

  <div v-on:click.self="doThat">...</div>

  <!-- click 事件只能点击一次 -->

  <a v-on:click.once="doThis"></a>

按键修饰符

Vue允许为v-on在监听键盘事件时添加按键修饰符:

  <!-- 只有在 keyCode 是 13 时调用 vm.submit() -->

  <input v-on:keyup.13="submit">

  Vue为最常用的按键提供了别名

  <!-- 同上 -->

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

  全部的按键别名:

  .enter

  .tab

  .delete (捕获 "删除" 和 "退格" 键)

  .esc

  .space

  .up

  .down

  .left

  .right

  .ctrl

  .alt

  .shift

  .meta      

好啦,事件处理器这一节的分享内容就介绍到这里,进入第二节~


 二、Vue自定义组件

1、组件简介 

      组件(Component)是Vue最强大的功能之一
      组件可以扩展HTML元素,封装可重用的代码
      组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树

2、自定义组件

自定义组件是什么?

自定义组件就是自己设置标签,然后实现它。后面我将会给大家分享如何使用别人的组件,比如之后的ElementUI里就封装了很多的组件,如果有学前端的朋友们,在自定义组件这一块是需要更加深入了解的喔!

本次的案例:实现自定义按钮组件        Vue.component

 所以接下来有两种传参方式,给我们的自定义组件进行传值。

 ①父传子(父组件 传参 给 子组件)

 

      props是父组件用来传递数据的一个自定义属性。
      父组件的数据需要通过props把数据传给子组件,子组件需要显式地用props选项声明 "prop" 

②子传父(子组件 传参 给 父组件)

 $emit是子组件用来传递数据的

自定义组件知识总结:

 父传子:props
   子传父(触发事件):$emit(eventName)
 

全局和局部组件

      全局组件:Vue.component(tagName, options),tagName为组件名,options为配置选项。

      局部组件: new Vue({el:'#d1',components:{...}})

   注1:Vue自定义事件是为组件间通信设计   
        vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定
     
        父Vue实例->Vue实例,通过prop传递数据
        子Vue实例->父Vue实例,通过事件$emit传递数据 

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


三、表单综合案例

在Vue中创建 表单提交

<!DOCTYPE html>
<html>
	<head>
		<!-- 导入依赖 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<!-- 创建一个多功能表单 -->
			姓名:<input type="text" v-model="uname"/><br>
			密码:<input type="password" v-model="pwd"/><br>
			年龄:<input type="text" v-model="age"/><br>
			性别:<input type="radio" name="sex" checked="checked"/>男
				<input type="radio" name="sex"/>女<br>
			爱好:
			<div v-for="l in likes">
				<input v-model="hobby" type="checkbox" :value="l.id"/>{{l.name}}
			</div><br>
			英语等级:
			<select v-model="selectedVal">
				<option v-for="e in englishs" :value="e.id">{{e.name}}</option>
			</select><br>
			<input @click="show" type="checkbox" />
			<input v-show="showFlag" @click="sub" type="button" value="ok" />
			<div></div>
		</div>
	</body>
	<script type="text/javascript">
		new Vue({
			el:'#app',
			data() {
				return {
					uname:null,
					pwd:null,
					age:null,
					sex:1,
					likes:[ //爱好的数据源
						{id:1,name:'篮球'},
						{id:2,name:'足球'},
						{id:3,name:'桌球'},
						{id:4,name:'乒乓球'}
					],
					englishs:[ //英语的数据源  下拉框
						{id:1,name:'优'},
						{id:2,name:'良'},
						{id:3,name:'差'}
					],
					hobby:[],//用来存放选中的爱好  比如1,3
					selectedVal:0,
					showFlag:false
				}
			},
			methods:{
				show() {
					this.showFlag = true;
				},
				sub(){
					// 后续都是json数据交互,向后台提交json对象
					var obj = {
						uname:this.uname,
						pwd:this.pwd,
						age:this.age,
						sex:this.sex,
						hobby:this.hobby,
						level:this.selectedVal
					}
					console.log(obj);
				}
			}
		})
	</script>
</html>

运行结果: 

 今日分享内容到此结束,希望对您有所帮助喔~

预告下期内容:【Vue路由】

我们下期再见! !!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值