Vue.js Method

Method
css


Vue.js 的事件监听通常都经过 v-on 指令配置在HTML中,虽然也能够在Javascript 代码中使用原生 addEventListener 方法添加事件监听,但Vue.js 自己并不提倡如此。html


看上去这种方式不符合传统的“关注点分离”的理念,但其实全部的Vue.js 事件处理方法和表达式都严格绑定在当前视图的 ViewModel 上。实际上,采用它提供的 v-on 指令有如下几点好处:vue


(1)、经过查看HTML 模板便能轻松定位 Javascript 代码中对应的方法app

(2)、无须在Javascript 中手动绑定事件,ViewModel 和 Dom 彻底解耦,更易于测试ide

(3)、当一个 ViewModel 被销毁时,全部的事件处理器都会被自动删除测试


如何绑定事件ui

在原生DOM 事件中,咱们能够经过 Javascript 给 HTML 文档元素注册不一样的事件处理程序。代码以下:this

<button onclick="learnVue()">submit</button>


AngularJS 也采起了相似的方式,只不过换成了ng-前缀的事件指令:spa

<button ng-click="learnVue()">submit</button>


Vue.js 也采起了这样的方式来绑定事件orm


一、内联方式

Vue.js 在HTML 文档元素中采用 v-on 指令来监听DOM事件

<div id="app">
    <button v-on:click="say('hi')">Say Hi</button>
    <button v-on:click="count+=1">Say What</button>
</div>


二、methods 配置

上例中,当用户将click 事件与某个方法绑定时,须要在Vue 实例中进行定义,全部定义的方法都放在methods 属性下

<div id="example">
    <button v-on:click="greet">Greet</button>
    <button v-on:click="say('hi')">Say Hi</button>
</div>

<script src="//cdn.bootcss.com/vue/1.0.26/vue.js"></script>
<script>
    new Vue({
        el:'#example',
        data:{
            name:'Vue.js',
        },
        //在 methods 对象中定义方法
        methods:{
            greet:function(event){
                //方法内 this 指向 Vue实例对象
                console.log(this);
                console.log('Hello' +this.name+'!');
                //event 是原生 DOM 事件
                console.log(event.target.tagName);

            },
            say:function(msg){
                alert(msg);
            }
        }
    })
</script>

wKioL1g0BY2gRcFJAACA33tSIFs582.png

须要注意的地方以下:

(1)、methods中定义的方法中的this 始终指向建立的 Vue实例

(2)、与事件绑定的方法支持参数 event 即原生 DOM 事件的传入

(3)、方法用在普通元素上时,只能监听原生 DOM事件;用在自定义元素组件上时,也能够监听子组件触发的自定义事件



三、 应用

前面的例子中,在Vue 实例中建立的方法须要访问原生DOM事件时能够直接传入 event 来得到。若是在内联语句处理器中须要访问原生DOM事件时,则能够用一个特殊变量 $event 将其传入方法中。


<div id="example">
    <a href="https://cn.vuejs.org/v2/guide/index.html" v-on:click="prevent($event)">Vue官网</a>
</div>

<script src="//cdn.bootcss.com/vue/1.0.26/vue.js"></script>
<script>
    new Vue({
        el:'#example',
        //在 methods 对象中定义方法
        methods:{
            prevent:function(event){
                //如今咱们能够访问原生事件对象
                event.preventDefault();
            }
        }
    })
</script>


这样,就阻止了点击a 连接之后,跳转到Vue页面

wKiom1g0CIDTK_fiAABUasUyIb8161.png



四、如何使用修饰符

修饰符(modifiers)是以半角句号(.)开始的特殊后缀,用于表示指令应当以特殊方式绑定。在事件处理器上,Vue.js 为 v-on 提供了4个事件修饰符,即 .prevent, .stop, .capture, .self,使Javascript代码负责处理纯粹的数据逻辑,而不用处理这些DOM事件的细节。


在使用方式上,事件修饰符能够串联,代码示例以下:

<a v-on:click.stop.prevent="doSomething"></a>


也能够只使用修饰符,不绑定事件:

<form v-on:submit.prevent></form>


4-一、prevent

在事件处理器中,常常须要调用 event.preventDefault() 来阻止事件的默认行为,Vue.js 提供了 .prevent 事件修饰符以使之在HTML中便能完成操做

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


4-二、stop

event.stopPropagation() 用于阻止事件冒泡,Vue.js 也提供了相应的.stop事件修饰符

<!--阻止单击事件冒泡-->
<a v-on:click.stop="doSomething"></a>


4-三、capture

.capture事件修饰符是 Vue.js 1.0.16 版本中新增的,表示事件侦听器时采用 capture 即捕获模式

<div v-on:click.capture="doThis"></div>


4-四、self

.self 事件修饰符一样是 Vue.js 1.0.16 版本中新增的,表示只当事件在该元素自己(而不是子元素)触发时触发回调

<div v-on:click.self="doThat"></div>



五、按键

监听键盘事件常常须要检测 keyCode。Vue.js 能够为 v-on 添加键盘修饰符

<!--只有在keyCode是13时 调用vm.submit()-->
<input v-on:keyup.13="submit">


更多关于keyCode的介绍,可参考博文 http://dapengtalk.blog.51cto.com/11549574/1860203

相关文章
相关标签/搜索