vue模板语法02

发布于:2022-12-30 ⋅ 阅读:(611) ⋅ 点赞:(0)

目录

目录

一、事件处理器

 1.“阻止冒泡” @click.stop

   2.“发送一次”@click.once

3.添加修饰符 @keyup.enter

二、自定义组件

三、组件通信

四、vue表单案例


一、事件处理器

 1.“阻止冒泡” @click.stop

    <body>
        <div id="app"> 
        
        
        <!-- 快捷键 :tab -->
        <!--如 .div>div>div>div -->
        <div class="div">
            <!-- @click.stop 阻止冒泡 -->
            <div class="red" @click.stop="red">
                <div class="yellow" @click.stop="yellow">
                    <div class="bule" @click.stop="bule">
                        <div class="green"  @click.stop="green"></div>
                    </div>
                </div>
            </div>
        </div>
        
        {{msg}}
        </div>
    </body>
    

 样式

 <head>
        <meta charset="utf-8" />
        <title></title>
        
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    
    <style type="text/css">
        .red{
            height:400px;
            width: 400px;
            background-color: red;
        }
        .yellow{
            height:300px;
            width: 300px;
            background-color: yellow;
        }
        .bule{
            height:200px;
            width: 200px;
            background-color: skyblue;
        }
        .green{
            height:100px;
            width: 100px;
            background-color: green;
        }
    </style>
    
    </head>

 方法


    <script type="text/javascript">
        
        new Vue({
            el:'#app',
            data(){
                return {
                msg:'hello hhhhh'    
                
                }
                
            },methods:{//弹出颜色
                red(){
                    alert('red');
                    
                },
                yellow(){
                    alert('yellow');
                    
                },
                bule(){
                    alert('bule');
                    
                },
                green(){
                    alert('green');
                    
                }
                
            }
            
            
            
        })
        
        

 原先效果;点击如绿色区域,弹出颜色绿红黄蓝

 

 后来效果,只能弹出颜色绿色

2.“发送一次”@click.once

 目的:避免对服务器频繁发送多余请求而造成服务器资源 被多次占用,提高服务器的使用和接收请求性能。

<!-- 发送一次请求 -->
        <p >发送一次请求 </p>
        <input type="text" v-model="msg" />
        <button type="button" @click.once="ddss">点我试试</button>

<script type="text/javascript">
        
        new Vue({
            el:'#app',
            data(){
                return {
                msg:'hello hhhhh'    
                
                }
                
            },methods:{//弹出颜色
                red(){
                    alert('red');
                    
                },
                yellow(){
                    alert('yellow');
                    
                },
                bule(){
                    alert('bule');
                    
                },
                green(){
                    alert('green');
                    
                },
                ddss(){//按钮只能使用一次
                    alert(this.msg);
                    console.log(this.msg);
                    //
                }

                
            }
          
        })
        
        
    </script>

 注意观察:对服务器的 请只发送了一次

3.添加修饰符 @keyup.enter

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

如:

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

<p >按键修饰符 </p>
        <input type="text" v-model="msg" @keyup.enter="ddss"  />
        
        

 按住Enter键

二、自定义组件

介绍;

组件(Component)是Vue最强大的功能之一。

意义:

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

组件结构:

全局(component)和局部组件

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

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

<!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">
				<my-button></my-button>
				
				
				
	{{msg}}
	
	
		</div>
		
	</body>
	<script type="text/javascript">
		Vue.component('my-button',{
			template:'<button>我的按钮</button>'
		})
		
		
			new Vue({
			el:'#app',
			data(){
				// 设置vue所管理边界中可以使用的变量
				return {
					msg:'hello goodgood!!'
			}
			}
		})
		
	</script>
</html>


三、组件通信

     <p > 父组件传参给子组件</p>

<body>
        <div id ="app">
            <p > 简单组件</p>
            <my-button></my-button>
            
                    <p > 父组件传参给子组件</p>
            <my-button m='zhangsan' n='3'></my-button>
                
             
    
        </div>
        
    </body>

<script type="text/javascript">
        Vue.component('my-button',{
            template:'<button>{{m}}点击了{{n}}次</button>',
            props:['m','n']
        })

        
        
            new Vue({
            el:'#app',
            data(){
                // 设置vue所管理边界中可以使用的变量
                return {
                    msg:'hello goodgood!!'
            }
            }
        })
        
    </script>

  <p > 子组件传参给父组件</p>


                <p > 子组件传参给父组件</p>
                <my-button m='zhangsan' n='3' @mymethod = "xxx"></my-button>

<script type="text/javascript">
        
        //内部组件
        Vue.component('my-button',{
            template:'<button @click="sub">{{m}}点击了{{n}}次</button>',
            props:['m','n'],
            methods:{
                sub(){
                    var name="张三";
                    var sex="女";
                    var age=23;
                    console.log(name);
                    console.log(sex);
                    console.log(age);
                    //子组件传参给父组件的关键在于1.$emit;2.自定义事件
                    this.$emit('mymethod',name,sex,age);
                }
            }
        })
        
        //外部组件 :把参数先传到内部在传到外部组件  sub--->$emit--->xxx
            new Vue({
            el:'#app',
            data(){
                // 设置vue所管理边界中可以使用的变量
                return {
                    msg:'hello goodgood!!'
                    }
            },
            methods:{
                
                xxx(a,b,c){
                    debugger;
                    console.log(a);
                    console.log(b);
                    console.log(c);
                    
                }
            }
        })
        
    </script>

总结;

父传子:props;

子传父;$emit;注册事件名


四、vue表单案例

<!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">
		<form >
			姓名:<input type="text"  v-model="uname"/><br />
			密码:<input type="password"   v-model="pwd"/><br />
			性别:
			<input name ="sex" type="radio"  checked="checked" />
			<input name ="sex" type="radio"   /><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>
			
			
			<input type="checkbox" @click="show" />
			<input  v-show="showFlag" @click="sub" type="button" value="提交" />
			
			
			
		</form>
		
		</div>
		
	</body>
	<script type="text/javascript">
		
	
		new Vue({
			el:'#app',
			data(){
				// 设置vue所管理边界中可以使用的变量
				return {
					uname:null,
					pwd:null,
					sex:1,
					likes:[//数据源 复选框
						
						{id:1,name:'画画'},
						{id:2,name:'足球'},
						{id:3,name:'K歌'},
						{id:4,name:'旅游'}
					],
					englishs:[//数据源 下拉框
						
						{id:1,name:'优'},
						{id:2,name:'良'},
						{id:3,name:'差'}
					],
					
					hobby:[],//来存放选中的爱好
					selectedVal:0,
					showFlag:false
					}
			},
			methods:{
				show(){
					this.showFlag=true;
				},
				sub(){
					//提交事件向后台提交json数据
					var obj={
						
						uname:this.uname,
						pwd:this.pwd,
						sex:this.sex,
						hobby:this.hobby,
						level:this.selectedVal
						
					}
					console.log(obj);
				}
				
			}
			
		})
		
	</script>
</html>

效果图:数据如下



网站公告

今日签到

点亮在社区的每一天
去签到