vue基础---事件处理

(1)事件监听

    v-on 指令监听 DOM 事件,并在触发时运行JS代码

    <div class="event_area">
        {{message}}
        <button v-on:click="show_info">按钮</button>
    </div>
    <script type="text/javascript">
        var event_area = new Vue({
            el:".event_area",
            data:{
                message:'展示信息'
            },
            methods:{
                show_info:function(){
                    alert(this.message);
                }
            }
        })
    </script>

 案例2:计算按钮点击次数

    监听事件

    <div class="event_area">
        您点击了{{num}}次按钮
        <button v-on:click="num++">按钮</button>
    </div>
    <script type="text/javascript">
        var event_area = new Vue({
            el:".event_area",
            data:{
                num:0
            }
        })
    </script>

    然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在 v-on 指令中是不可行的。因此 v-on 还可以接收一个需要调用的方法名称。如下所示,调用add_num方法

   解析: `this`在方法里指向当前 Vue 实例

    <div class="event_area">
        您点击了{{num}}次按钮
        <button v-on:click="add_num">按钮</button>
    </div>
    <script type="text/javascript">
        var event_area = new Vue({
            el:".event_area",
            data:{
                num:0
            },
            methods:{
                add_num:function(){
                    return this.num++;
                }
            }
        })
    </script>

(2)内联处理器中的方法

    除了直接绑定到一个方法,也可以在内联 JavaScript 语句中调用方法:

<div id="example-3">
  <button v-on:click="say('hi')">Say hi</button>
  <button v-on:click="say('what')">Say what</button>
</div>
new Vue({
  el: '#example-3',
  methods: {
    say: function (message) {
      alert(message)
    }
  }
})

(3)事件修饰符

    ①表单事件:

    <form id="ti_jiao" v-on:submit="onSubmit">
        <input type="text"><br />
        <input type="submit" value="提交">
    </form>
    <script type="text/javascript">
        var ti_jiao = new Vue({
            el:"#ti_jiao",
            methods:{
                onSubmit:function(e){
                    e.preventDefault();
                    alert("弹框")
                }
            }
        })
    </script>

    阻止表单默认事件,即数据提交页面刷新。 

    在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。

    为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。

.stop
.prevent
.capture
.self
.once
.passive
<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>

<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>

    ②修饰符顺序

    使用修饰符时,顺序很重要;相应代码会以同样的顺序产生。

    因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。

   ③一次性修饰符

<!-- 点击事件将只会触发一次 -->
<
input type="button" name="btn" v-on:click.once="prompt" value="弹框"> methods:{ prompt:function(){ alert("弹框"); } }

   结果:点击按钮后,只能弹框一次。

   ④被动修饰符

    Vue 还对应 addEventListener 中的 passive 选项提供了 .passive 修饰符

<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成  -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>

    .passive 修饰符能够有效提升移动端的性能

(4)按键修饰符(待验证

(5)系统修饰符(待验证

 

 

 

 

 

 

 

 

 

 

.

posted @ 2019-03-23 14:45  剑仙6  阅读(164)  评论(0编辑  收藏  举报
欢迎访问个人网站www.qingchun.在线