美文网首页Vue.js前端Vue专辑前端开发笔记
Vue中的事件与原生中的事件

Vue中的事件与原生中的事件

作者: 九亿girls的梦 | 来源:发表于2019-03-26 14:25 被阅读2次

    Vue中的事件与原生中的事件


    原生

    • 当用户的某个行为触发html元素的某个事件时,对应该事件的构造函数便会生成一个事件对象,记录触发事件的元素、发生时鼠标位置、发生时键盘状态等信息,并且全局的window.event引用指向该事件对象。我们可以利用js操作该对象。例如:
    <script>
    function whichElement(e){
    if (!e) var e = window.event
    if (e.target) let targ = e.target
    else if (e.srcElement) let targ = e.srcElement
    if (targ.nodeType == 3) // defeat Safari bug
       targ = targ.parentNode
    let tname=targ.tagName
    alert("You clicked on a " + tname + " element.")
    }
    </script>
    </head>
    <body onmousedown="whichElement(event)"> //在这里传入操作event
    <p>在文档中点击某个位置。消息框会提示出您所点击的标签的名称。</p>
    <h3>这是标题</h3>
    <p>这是段落。</p>
    <img src="/i/eg_mouse2.jpg" />
    </body>
    

    在原生中我们要手动的调用event。


    Vue中使用v-on

    • 使用v-on,绑定handle函数时,分两种状况:
      1、不带参数,vue在调用这个函数时,会把$event作为第一个参数传给这个函数。
      2、带参数,vue在调用这个函数时,会把开发者的写参数给传给这个函数。
    <input type="text" name="input1" @blur="onBlur1">
    <input type="text" name="input2" @blur="onBlur2('ss')">
    ...(methods)
    onBlur1(e){
            console.log(e.target.name); // input1
          },
    onBlur2(msg,e){
            console.log(msg);// ss
            console.log(e);// undefined
          },
    
    • 如果想即使用开发者给的,又想使用event,可以手动的添加$event
    <input type="text" name="input2" @blur="onBlur2('ss',$event)">
    ...(methods)
     onBlur2(msg,e){
            console.log(msg);// ss
            console.log(e.target.name)// input2
          },
    

    注意!在vue中不能访问event,要使用$event来代替。


    关于vue的自定义事件,$emit

    1. 使用emit函数时,函数的第二个参数及后面的参数为:处理这个事件的回调函数的参数(当只写回调函数名时,没有其它参数时),并且在发送自定义事件后$event指向第二个参数(ps:之前指向原生触发的事件)。
    // 自定义组件内容
    <button @click="$emit('test','s1','s2')">test</button>
    // 使用自定义组件
    <test ref="test" @test="doTest"></test>
    doTest(arg1,arg2){
            console.log(arg1); // 's1'
            console.log(arg2); // 's2'
            console.log(arguments.length); // 2
            console.log($event);// $event is not defined
          },
    

    注意!这里的$event是用不了的,必须传入回调函数。

    1. 回调函数有参数,要使用子组件上送的数据,必须传入$event
    <test ref="test" @test="doTest('ss',$event)"></test>
    doTest(arg1,e){
            console.log(arg1); // 'ss'
            console.log(e); // 's1' 这是子组件上送的数据
            console.log(arguments.length); // 2
          },
    
    1. 父组件要使用子组件触发的原生事件,可以在子组件的emit中,把event作为参数。
    // 自定义组件内容
    <button name="btnTest" @click="$emit('test',$event)">test</button>
    // 使用自定义组件
    <test ref="test" @test="doTest('ss',$event)"></test>
     doTest(arg1,e){
            console.log(arg1); // 'ss'
            console.log(e.target.name); // 'btnTest'
            console.log(arguments.length); // 2
          },
    

    相关文章

      网友评论

        本文标题:Vue中的事件与原生中的事件

        本文链接:https://www.haomeiwen.com/subject/tkqgvqtx.html