zoukankan      html  css  js  c++  java
  • 14. VUE

    v-on 就是事件监听

    之前用过 ,复习一下:

    v-on介绍
    作用:绑定事件监听器

    缩写:@

    预期:Function | Inline Statement | Object  分别对应 :  方法、表达式、对象

    参数:event

    用法就不多说了 直接就:  v-on:click="xxxx语句" 或 @click="xxxx语句".  前者是完整写法  后者是 语法糖写法

    具体是什么事件 你自己改即可

    v-on 的 传参 【参数】 重要

    1. 有参 和 无参的区别

    <div class="app">
        <button @click="add()">按钮1</button>
    
    </div>
    
    <script>
        const  app = new Vue({
            el:".app",
            data:{
                i:0
            },
            methods:{
                add(){
                    this.i++;
                    console.log(this.i);
                }
            }
        })
    </script>

    这是个正常例子,说明点击一下 i就++,然后打印出来,很明显add是无参的,那么无参的方法,刁调用的时候 不用加括号也是可以的. 这很容易懂:

    <div class="app">
    <!--  原来:  <button @click="add()">按钮1</button> 改变:-->
        <button @click="add">按钮1</button>
    </div>

    那么如果 我add有参,你调用的时候 我不给参数 而且 不加括号 会出现什么:

    <div class="app">
        <button @click="add">按钮1</button>   <!--add这个方法 是有参数的哦 我不给参数 而且 不加括号-->
    </div>
    
    <script>
        const  app = new Vue({
            el:".app",
            methods:{
                add(x){
                    console.log(x); //打印x 看些不给参数 看下给的参是什么
                }
            }
        })
    </script>

    打印出来的是 点击方法的 even ,所以呢 我们学过原生的JS 也知道 even完全可以用this 传进来 但我们这里讲VUE的: ,Vue中的 v-on :

    当你方法有参数的时候,你直接写 键名 是直接默认把 even 当参数传递进去的。【这里的 键名 是指 ES6新写法 的内个 键名 并不是方法名哦】

    问题来了: 如果有两个以上参数 那么我们想要一个even  但我们怎么知道谁是even?

    代码:

    <div class="app">
        <button @click="add">按钮1</button>   <!--add这个方法 是有参数的哦 我不给参数 而且 不加括号-->
    </div>
    
    <script>
        const  app = new Vue({
            el:".app",
            methods:{
                add(x,y){
                    console.log(x); //打印x
                    console.log(y); //打印y
                }
            }
        })
    </script>

    打印的是 x 是 even ,y 是 undefined ,所以如果存在多个参数,但你直接给个键名的话,那么他永远都会往第一个参数里面填充even,

    如果我们实在是想让even 指定赋给 某个参数 我们可以这样:

    如果需要同时传入某个参数,同时需要event时,可以通过$event传入事件。

    代码:

    <div class="app">
        <button @click="add(x,$event,z)">按钮1</button>   <!--这里even 想赋给 y-->
    </div>
    
    <script>
        const  app = new Vue({
            el:".app",
            data:{
              x:1,
              z:2
            },
            methods:{
                add(x,y,z){
                    console.log(x); //打印x
                    console.log(y); //打印even
                    console.log(z); //打印z
                }
            }
        })
    </script>

    所以 even 就成功赋给 y 了,这里注意啊  当你参数没加双引号,那么vue直接当变量找,没找到就报错了。

    所以呢 参数就说打这里

    修饰符


    什么是修饰符:

    在某些情况下,我们拿到event的目的可能是进行 一些事件处理,Vue提供了修饰符来帮助我们方便的处理一些事件:【更方便!!!!!!】

    .stop - 调用 event.stopPropagation()。

    .prevent - 调用 event.preventDefault()。

    .{keyCode | keyAlias} - 只当事件是从特定键 触发时才触发回调。

    .native - 监听组件根元素的原生事件。

    .once - 只触发一次回调。

    第一个: 很熟悉哦 其实就是阻止冒泡事件啊:

    <div class="app">
        <div style="color: red" @click="outs()">
            外面
            <button @click.stop="ins()">         <!--如果你不加 .stop 修饰符 点击按钮会冒泡的-->
                里面
            </button>
        </div>
    </div>
    
    <script>
        const app = new Vue({
            el:".app",
            methods:{
                outs(){alert("外面")},
                ins(){alert("里面")}
            }
        })
    </script>

    第二个:很熟悉哦 其实就是阻止组件的默认事件啊: 但阻止那个事件的 你需要自己定义,下面阻止 点击 这个事件的 默认属性:

    <div class="app">
        <form action="xxx">
            <input @click.prevent="clicks()"  type="submit">       <!--点击的默认事件是 提交  那么我们阻止掉-->
        </form>
    </div>
    
    <script>
        const app = new Vue({
            el:".app",
            methods:{
                clicks(){alert("阻止了input的默认事件 我自己收集数据")},
            }
        })
    </script>

    第三个:   .{keyCode | keyAlias} - 只当事件是从特定键 触发时才触发回调。

    这个的意思是监视你的键盘 比如 keyup 事件  是用户按下键盘后弹起的事件  那么你就可以通过这个修饰符去修饰你想也已监听特定的键: 他可以是键代码 也可以是 VUE定义好的键变量:

    例如: 我按下回车键 后想触发语句:

    <script src="js/vue.js"></script>
    <div  class = "app">
      <!--这里还可以是键代码  你喜欢了-->
    <textarea @keyup.enter="tips()">
      你尝试按下回车键 会触发我的事件!!
    </textarea>
    </div>
    
    
    <script>
    
    const app = new Vue({
      el:".app",
      methods:{
        tips(){
          alert("你按下了 回车键!!!")
        }
      }
    })
    </script>

    第四个:这个要自定义组件才能实现 这里暂缺

    暂缺

    第五个: 这玩意就是说 只触发一次 事件。以后都不触发了 ,JQ也有这个方法的:

    <div class="app">
        <button @click.once="clicks()">v-on 的 once</button>
    </div>
    
    <script>
        const app = new Vue({
            el:".app",
            methods:{
                clicks(){alert("只会触发我一次 第二次第三次第xxx次不会执行我")},
            }
        })
    </script>

    完.

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14968592.html

  • 相关阅读:
    Solution to LeetCode Problem Set
    《Cracking the Coding Interview》读书笔记
    诗词收集——用于人文素养扫盲
    2015年清华大学计算机系考研总结
    编程知识大杂烩
    hihoCoder 1175:拓扑排序二
    Hackerrank
    Hackerrank
    LeetCode
    LeetCode
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14968592.html
Copyright © 2011-2022 走看看