Vue(三)跨向实例的最后一步

template

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<template v-if="isShow">
				template
			</template>
		</div>
	</body>
	<script>
		var app=new Vue({
			el:"#app",
			data:{
				isShow:true
			}
			
		})
	</script>
</html>

运行后可以发现template标签不显示
在这里插入图片描述

事件处理

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<!--js冒泡事件-->
			<div @click="fun1">
				其他内容
				<h1 @click="fun2">
					fun2
				</h1>
			</div>
		</div>
	</body>
	
	<script>
		var app=new Vue({
			el:"#app",
			methods:{
				fun1:function(){
					alert(1);
				},
				fun2:function(){
					alert(2);
				}
			}
		})
	</script>
</html>

运行后我们点击
在这里插入图片描述
可以看到先弹出fun2里面的内容,再弹出fun1里面的。这个事件我们称为冒泡事件(向上传播)

那么有时候我们只想触发里面的内容,而不想外面的内容触发呢,很简单,只需要改

<!-- 阻止单击事件继续传播 -->
<h1 @click.stop="fun2">
	fun2
</h1>

运行后再点击发现只触发fun2的内容了

prevent:阻止标签的默认事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<!--js冒泡事件-->
			<div @click="fun1">
				其他内容
				<!-- prevent 阻止标签的默认事件-->
				<a @click.stop="fun2" href="https://www.baidu.com/">
					fun2
				</a>
			</div>
		</div>
	</body>
	
	<script>
		var app=new Vue({
			el:"#app",
			methods:{
				fun1:function(){
					alert(1);
				},
				fun2:function(){
					alert(2);
				}
			}
		})
	</script>
</html>

在这里插入图片描述

<a @click.stop.prevent="fun2" href="https://www.baidu.com/">
					fun2
</a>

在这里插入图片描述

submit.prevent

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<!-- 提交事件不再重载页面 -->
			<form v-on:submit.prevent="onSubmit">
				<input type="text" id="name" /><br/>
				<input type="text" id="password" />
				<input type="submit" value="提交" />
			</form>
		</div>
	</body>
	<script>
		var app=new Vue({
			el:"#app",
			methods:{
				onSubmit:function(){
					alert("提交成功");
				}
			}
		})
	</script>
</html>

运行后我们在输入框中输入值点击后发现值还在输入框里面
在这里插入图片描述

按键事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<input @keyup="fun1" value="keyup事件" />
		</div>
	</body>
	<script>
		var app=new Vue({
			el:"#app",
			methods:{
				fun1:function(){
					alert(1);
				}
			}
		})
	</script>
</html>

在这里插入图片描述
可以发现不管是对框中的值的增加,删除,只要鼠标选中框摁键盘都会触发

选框

单选框

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<input type="checkbox" v-model="myCheck" /><br/>
			<h1>myCheck值:{{myCheck}}</h1>
		</div>
	</body>
	<script>
		var app=new Vue({
			el:"#app",
			data:{
				myCheck:true
			}
		})
	</script>
</html>

在这里插入图片描述

多选框

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<input type="checkbox" value="1" v-model="myChecks" />王者<br/>
			<input type="checkbox" value="2" v-model="myChecks"/>吃鸡<br/>
			<input type="checkbox" value="3" v-model="myChecks" />LOL<br/>
			<h1>myChecks的值:{{myChecks}}</h1>
		</div>
	</body>
	<script>
		var app=new Vue({
			el:"#app",
			data:{
				myChecks:[]
			}
		})
	</script>
</html>

在这里插入图片描述

单选

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			性别:{{sex}}<br/>
			<input type="radio" value="男" v-model="sex"/><input type="radio" value="女" v-model="sex" /></div>
	</body>
	<script>
		var app=new Vue({
			el:"#app",
			data:{
				sex:''
			}
		})
	</script>
</html>

在这里插入图片描述
下拉框

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<select v-model="sel">
				<option value="A">A</option>
				<option value="B">B</option>
				<option value="C">C</option>
			</select>
			绑定的值是:{{sel}}
		</div>
	</body>
	<script>
		var app=new Vue({
			el:"#app",
			data:{
				sel:""
			}
		})
	</script>
</html>

在这里插入图片描述

lazy

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<!-- 在“change”时而非“input”时更新 -->
			<input v-model.lazy="name">
			<p>姓名:{{name}}</p>
		</div>
	</body>
	<script>
		var app=new Vue({
			el:"#app",
			data:{
				name:"aa"
			}
		})
	</script>
</html>

输入完鼠标移开后下面才会改变值
在这里插入图片描述

组件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<com1 name="aa"></com1>
			<com1 name="bb"></com1>
			<com1 name="cc"></com1>
		</div>
	</body>
	<script>
		
		Vue.component("com1",{
			//绑定外部的参数
			props:["name"],
			//声明组件数据(函数)
			data(){
				return{
					str:"data"
				}
			},
			template:'<h1>这里是组件{{name}}---{{str}}</h1>'
		})
		
		var app=new Vue({
			el:"#app"
		})
	</script>
</html>

在这里插入图片描述
有个小特性:根级标签只能有一个,具体的例子:h1标签两个

template:'<h1></h1><h1>这里是组件{{name}}---{{str}}</h1>'

在这里插入图片描述
修改为:

template:'<div><h1></h1><h1>这里是组件{{name}}---{{str}}</h1></div>'

在这里插入图片描述

$emit
将template修改

template:`<div>
				<h1>这里是组件{{str}}---{{name}}</h1>
				<a @click="$emit('com')">点击</a>
			</div>`

在这里插入图片描述

插槽

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		<div id="app">
			<com1 name="aa" @com="fun1">
				<h1>这里是插入组件的插槽</h1>
			</com1>
			<com1 name="bb"></com1>
			<com1 name="cc"></com1>
		</div>
	</body>
	<script>
		
		Vue.component("com1",{
			//绑定外部的参数
			props:["name"],
			//声明组件数据(函数)
			data(){
				return{
					str:"data"
				}
			},	
			template:`<div>
						<h1>这里是组件{{str}}---{{name}}</h1>
							<slot></slot>
							<a @click="$emit('com')">点击</a>
					  </div>`
		})
		var app=new Vue({
			el:"#app",
			methods:{
				fun1:function(){
					alert(1);
				}
			}
		})
	</script>
</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值