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

简介: 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>

目录
相关文章
|
1月前
|
JavaScript API 容器
Vue 3 中的 nextTick 使用详解与实战案例
Vue 3 中的 nextTick 使用详解与实战案例 在 Vue 3 的日常开发中,我们经常需要在数据变化后等待 DOM 更新完成再执行某些操作。此时,nextTick 就成了一个不可或缺的工具。本文将介绍 nextTick 的基本用法,并通过三个实战案例,展示它在表单验证、弹窗动画、自动聚焦等场景中的实际应用。
126 17
|
8月前
vue3+Ts 二次封装ElementUI form表单
【10月更文挑战第8天】
636 59
|
7月前
|
分布式计算 JavaScript 前端开发
vue学习第8章(vue的购物车案例)
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,正向全栈进发。本篇分享一个综合练习小demo,包括目录结构、HTML、JS及CSS代码,通过增删商品实现总价计算。关注我,获取更多前端知识!🎉🎉🎉
90 1
|
7月前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
7月前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
8月前
|
存储 JavaScript
Vue 组件间通信的方式有哪些?
Vue组件间通信主要通过Props、Events、Provide/Inject、Vuex(状态管理)、Ref、Event Bus等实现,支持父子组件及跨级组件间的高效数据传递与状态共享。
|
8月前
|
存储 缓存 JavaScript
vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解
vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解
96 2
|
8月前
|
JavaScript
《进阶篇第9章》学习vuex知识点后练习:求和案例_纯vue版代码
《进阶篇第9章》学习vuex知识点后练习:求和案例_纯vue版代码
48 1
|
8月前
|
JavaScript UED
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
【10月更文挑战第5天】本示例展示了如何在 Vue.js 中使用 Element UI 组件实现动态添加和删除嵌套表单项。该表单包含设备信息、设备部位及其对应的任务列表,支持用户动态添加设备部位和任务,并提供相应的表单验证规则。
1002 0
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
|
8月前
|
JavaScript
Vue组件点击事件不触发的问题,添加事件修饰符native解决
Vue组件点击事件不触发的问题,添加事件修饰符native解决
833 0