Vue.js模板语法[下](事件处理,表单综合案例,自定义组件)---详细讲解

简介: Vue.js模板语法[下](事件处理,表单综合案例,自定义组件)---详细讲解

一,事件处理

1. `.stop`:阻止事件冒泡。使用该修饰符可以阻止事件向父元素传播

2. `.prevent`:阻止默认事件。使用该修饰符可以阻止事件的默认行为。

3. `.capture`:使用事件捕获模式。默认情况下,事件是在冒泡阶段处理的,使用该修饰符可以改为在捕获阶段处理。

4. `.self`:只在事件触发的元素自身上触发事件处理器。如果事件是由子元素触发的,使用`.self`修饰符可以阻止事件处理器执行。

5. `.once`:只触发一次事件处理器。使用该修饰符可以确保事件处理器只执行一次。

6. `.passive`:提升滚动性能。如果事件处理器中没有调用preventDefault()阻止默认事件,可以使用`.passive`修饰符来告诉浏览器该事件处理器不会阻止默认事件,从而提升滚动的性能。

 

事件修饰符

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

① .stop

当我们嵌套多个div并设置点击事件的时候,会弹出多个提示语句,使用.stop即可

没有使用.stop的案例:

<!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>
    <style>
    .one{
      background-color: aqua;
      height: 400px;
      width: 400px;
    }
    .two{
      background-color: red;
      height: 300px;
      width: 300px;
    }
    .three{
      background-color:yellow;
      height: 200px;
      width: 200px;
    }
    .four{
      background-color: darkgray;
      height: 100px;
      width: 100px;
    }
    </style>
  </head>
  <body>
    <div id="B">
    <div class="one" @click="click1" >
      <div class="two" @click="click2">
        <div class="three" @click="click3">
          <div class="four" @click="click4"></div>
        </div>
      </div>
    </div>
    </div>
    <script>
      new Vue({
        el:'#B',
        data(){
                  return{
            msg:'Hello Bing! ! !'
          };    
        },
        methods:{
          click1(){
            alert("click1");
          },
          click2(){
            alert("click2");
          },
          click3(){
            alert("click3");
          },
          click4(){
            alert("click4");
          }
        }
      });
    </script>
  </body>
</html>

会发现,越在里面嵌套的div,越会弹出多个提示语句,再使用.stop即可

如:

<div class="one" @click.stop="click1" >
      <div class="two" @click.stop="click2">
        <div class="three" @click.stop="click3">
          <div class="four" @click.stop="click4"></div>
        </div>
      </div>

加上之后,再试试!

.once

在我们日常生活中,在点击提交按钮上传相关的资料或app点击查询的时候。有些时候觉得是卡了,然后就一直点击相关的按钮,其实一直点的时候会将你想提交的资料数据等等,重复将数据提交到后台。

如:

.once就是将重复的数据只能提交一遍,然后在事件上点击.once,再试试

<button @click.once="clickME">点我</button>

二,表单综合案例

表达综合案例作用:

    在Vue中,整合所有语法是指将Vue的各种语法特性结合起来使用,以实现更复杂、更灵活的功能。通过整合各种语法特性,可以更好地利用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>
    <style>
    </style>
  </head>
  <body>
    <div id="B">
      姓名:<input name="name" v-model="name"/><br />
      密码:<input name="pwd" v-model="pwd"/><br />
        性别<span v-for="s in sexlist">
          <input type="radio" name="sex" id="" v-model="sex" :value="s.id">{{s.name}}
            </span><br /> 
        籍贯:<select name="Myaddress" v-model="Myaddress">
        <option v-for="a in address" :value="a.id">{{a.name}}</option>
          </select><br />
        爱好:<span v-for="h in hobby">
         <input type="checkbox" name="Myhobby"  v-model="Myhobby" :value="h.id"/>{{h.name}}
          </span><br />
        个人简介:<textarea v-model="sign" cols="12" rows="8"></textarea><br />
      同意:<input type="checkbox" v-model="ok"/><br />
        <button v-show="ok" @click="tijiao">提交</button>
      </div>
    <script>
      new Vue({
        el:'#B',
        data(){
                  return{
           name:'ZB',
           pwd:'666666',
           sexlist:[{
             name:'男',id:1,
             },{
              name:'女',id:2,
             },{
                  name:'未知',id:0,
              }],
           sex:1,
           hobby:[{
             name:'敲代码',id:1
           },{
             name:'还是敲代码',id:2
           },{
             name:'动画片',id:3
           },{
             name:'还是看动画片',id:4
           }],
           Myhobby:[], 
           address:[{
             name:'缅北',id:1
           },{
             name:'泰国',id:2
           },{
             name:'m78',id:3
           },{ 
             name:'重庆 ',id:4
           }],
           Myaddress:null,
           sign:null,
           ok:false
          };    
        },
         methods:{
           tijiao(){
                var obj={};
        obj.name=this.name;
        obj.pwd=this.pwd;
        obj.sex=this.sex;
        obj.address=this.Myaddress;
        obj.love=this.Myhobby;
        obj.sign=this.sign;
        console.log(obj);
         }
         }
      });
    </script>
  </body>
</html>

三,自定义组件

      在前端开发中,自定义组件通常由 HTML、CSS 和 JavaScript 代码组成,用于实现特定的用户界面元素和行为。例如,一个自定义的按钮组件可能具有特定的样式、点击效果和交互行为。通过创建自定义组件,开发者可以减少重复的代码编写,提高代码的可复用性和维护性。

总之,自定义组件是开发者按照自己的需求和特定场景创建的、具有特定功能的组件,用于增强软件的功能和可定制性

常见的组件:

父子组件通信:父组件可以通过属性绑定向子组件传递数据,子组件可以通过事件来向父组件发送消息。父组件通过属性绑定将数据传递给子组件,子组件可以通过props属性接收并使用这些数据。子组件可以通过$emit方法触发事件,并传递参数给父组件。这种通信方式符合单向数据流的原则,父组件通过属性传递数据给子组件,而子组件通过事件将消息传递给父组件。

创建一个自定义组件button

<!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="B">
       <h3>自定义组件的使用</h3>
       <my-button>xx</my-button>
    </div>
    <script>
      new Vue({
        el:'#B',
        components:{
          'my-button':{
            template:'<button>按钮</button>'
          }
        },
        data(){
                  return{
            msg:'Hello Bing! ! !'
          };    
        },
        methods:{
        }
      });
    </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="B">
       <h3>自定义组件的使用</h3>
       <my-button></my-button>
        <h3>组件通信---父传子</h3>
     <my-button btn="bulbu"></my-button>
     <h3>组件通信---父传子2</h3>
     <my-button btn="我没k"></my-button>
    </div>
    <script>
      new Vue({
        el:'#B',
        components:{
          'my-button':{
            props:['btn'],
            template:'<button @click="clickME">我被{{btn}}点击了{{n}}次</button>',
           data:function(){
             return{
               n:1
             }
           },
           methods:{
             clickME(){
               this.n++;
             }
           }
          }
        },
        data(){
                  return{
            msg:'Hello Bing! ! !'
          };    
        },
        methods:{
        }
      });
    </script>
  </body>
</html>

组件子传父

组件通信中子传父是Vue中常用的组件通信方式之一,它可以实现子组件向父组件传递数据、实现组件的解耦和复用、实现数据的传递和共享等功能。通过合理使用子传父,可以更好地组织和管理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="B">
       <h3>自定义组件的使用</h3>
        <h3>组件通信---子传父</h3>
     <my-button btn="我没k" @xxx='getParam'></my-button>
    </div>
    <script>
      new Vue({
        el:'#B',
        components:{
          'my-button':{
            props:['btn'],
            template:'<button @click="clickME">我被{{btn}}点击了</button>',
           methods:{
             clickME(){
               let name ="帅哥";
               let bname ="我没k的故事";
               let price ="借的";
               this.$emit('xxx',name,bname,price)
             }
           }
          }
        },
        data(){
                  return{
            msg:'Hello Bing! ! !'
          };    
        },
        methods:{
          getParam(a,b,c ){
            console.log(a,b,c)
          }
        }
      });
    </script>
  </body>
</html>

目录
相关文章
|
3月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
326 2
|
6月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
814 0
|
3月前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
406 11
|
8月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
1045 4
|
6月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
8月前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
6月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
483 17
|
6月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件的实现代码:支持自定义表情库、快捷键发送和输入框联动的聊天表情解决方案
本文详细介绍了在 Vue 项目中实现一个功能完善、交互友好的表情包输入组件的方法,并提供了具体的应用实例。组件设计包含表情分类展示、响应式布局、与输入框的交互及样式定制等功能。通过核心技术实现,如将表情插入输入框光标位置和点击外部关闭选择器,确保用户体验流畅。同时探讨了性能优化策略,如懒加载和虚拟滚动,以及扩展性方案,如自定义主题和国际化支持。最终,展示了如何在聊天界面中集成该组件,为用户提供丰富的表情输入体验。
511 8
|
6月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
289 1

热门文章

最新文章