vue模板语法下集->事件处理器,表单的综合案例,组件通信

  • 事件处理器
  • 表单的综合案例
  • 组件通信

1.事件处理器

实现功能:原来每点击一下最里面颜色外层,有几层会弹出几下,加上@click.stop后不管第几层只会弹一下;原本点击几下"点我"后台就会显示点了几下,加上@click.once后不管点击几下,后台只显示一次

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>事件处理</title>
		<style type="text/css">
			.one{
				background-color: red;
				height: 400px;
				width: 400px;
			}
			.two{
				background-color: blue;
				height: 300px;
				width: 300px;
			}
			.three{
				background-color: yellow;
				height: 200px;
				width: 200px;
			}
			.four{
				background-color: pink;
				height: 100px;
				width: 100px;
			}
			
		</style>
	</head>
	<body>
		<div id="app">
			<div class="one" @click.stop="fun1">
				<div class="two" @click.stop="fun2">
					<div class="three" @click.stop="fun3">
						<div class="four" @click.stop="fun4"></div>
					</div>
				</div>
			</div>
			<input :value="msg"/>
			<button @click.once="clickMe">点我</button>
		</div>
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
						msg:'hello 小兵',
					};
				},
				methods:{
					fun1(){
						alert("fun1");
					},
					fun2(){
						alert("fun2");
					},
					fun3(){
						alert("fun3");
					},
					fun4(){
						alert("fun4")
					},
					clickMe(){
						console.log(this.msg)
					}
				}
			});
		</script>
		
	</body>
</html>

2.表单的综合案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>表单综合案例</title>
		
	</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 adress" :value="a.id">{
   
   {a.name}}</option>
			</select><br>
			爱好:<div v-for="h in hobby" >
				<input type="checkbox" name="myLike" v-model="myLike" :value="h.id"/>{
   
   {h.name}}
			</div> <br />
			个人简介:<textarea v-model="sign" cols="10" rows="5"></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:'123456',
						sexList:[{
							name:'男',id:1
						},{
							name:'女',id:2
						},{
							name:'未知',id:3
						}],
						sex:1,
						hobby:[{
							name:'保健',id:1
						},{
							name:'理发',id:2
						},{
							name:'洗头',id:3
						},{
							name:'养生',id:4
						}],
				        myLike:[],
						adress:[{
							    name:'湖南',id:1
							},{
								name:'陕西',id:2
							},{
								name:'江西',id:3
							},{
								name:'哈尔滨',id:4
						}],
						myAddr:null,
						sign:null,
						ok:false
					};
				},
				methods:{
					dosub(){
						var obj={};
						obj.name=this.name;
						obj.pwd=this.pwd;
						obj.sex=this.sex;
						obj.adress=this.adress;
						obj.love=this.myLove;
						obj.sign=this.sign;
						console.log(obj);
					}
				}
			});
		</script>
	</body>
</html>

3.组件通信

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>组件传参父传子</title>
	</head>
	<body>
		<div id="app">
			<p>自定义组件</p>
			<my-button>xx</my-button>
			<p>组件通信父传子</p>
			<my-button ma='ss'></my-button>
			<p>组件通信父传子2</p>
			<my-button ma='ss' n="10"></my-button>
		</div>
		<script type="text/javascript">
			new Vue({
				el:'#app',
				components:{
					'my-button':{
						props:['ma'],
						template:'<button @click="clickMe">被{
   
   {ma}}点击了{
   
   {n}}次</button>',
						data:function(){
							return{
								n:1
							}
							},
							methods:{
								clickMe(){
									this.n++;
								}
								}	
							},
						
				},
				data(){
					return{
						msg:'hello 小兵'
					};
				},
						
			});
		</script>
		
	</body>
</html>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>组件传参子传父</title>
	</head>
	<body>
		<div id="app">
			<p>组件通信子传父</p>
			<my-button ma='ss' @xxx="getParam"></my-button>
			
		</div>
		<script type="text/javascript">
			new Vue({
				el:'#app',
				components:{
					'my-button':{
						props:['ma'],
						template:'<button @click="clickMe">被{
   
   {ma}}点击了</button>',
						data:function(){
							return{
								n:1
							}
							},
							methods:{
								clickMe(){
									let name='溜冰';
									let bname='芊芊来了';
									let price='免费';
									this.$emit('xxx',name,bname,price)
								}
								}	
							},
				},
				data(){
					return{
						msg:'hello 小兵',
					}
				},
					methods:{
							getParam(a,b,c){
								console.log(a,b,c);
							}
					}		
			});
		</script>
		
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_73471776/article/details/133065030