vue 的事件修饰符(v-on, v-model)

15 篇文章 0 订阅

先谈谈我对vue 的一些指令的理解吧;
v-bind, 顾名思义是绑定的意思;但是只能绑定属性 语法糖:@

v-on 是绑定一个事件, 语法糖 :

v-model 是双向数据的绑定,只能用于表单中,

而值得一说的v-model 相当于是 v-bind 与v-on 的语法糖;

因为使用v-bind 与v-on 也可以实现双向数据的绑定; 使用event.target.value 即可实现

值得注意的是如果将这个方法直接写在input事件中的时候,此时需要写成
方法没有传参的时候,默认会将对应的事件传入
$event.target.value

 <div class="app">
        <h3>事件修饰符的总结</h3>
        <div>
             <input type="text" :value="msg" @input='clickEvent()'>{{msg}}
              <!-- 两者等效 -->
             <input type="text" v-model="msg1">{{msg1}}
        </div>
       
    </div>
    

    <script>
    
        const app=new Vue({
            el:'.app',
            data:{
                msg:'绑定一个数据'

            },
            methods:{
                clickEvent(){
                    console.log(event);
                   return this.msg=event.target.value;

                }

            }
        })
    </script>

但是这两者还是有些区别的,使用v-bind与v-on实现的双向数据是实时的,就是输入什么都会立马获取到,
而v-model 会在输入完后, 在按下其他键才会显示, (例如空格/enter键)


我们那就再说说事件修饰符吧, v-on 默认会有事件冒泡的,
对于利用事件冒泡,我们利用事件委托来达到一些意想不到的目的,

可是我们有时并不像产生事件冒泡,这就要利用到我们的事件修饰符
常用的事件修饰符有:

.stop 阻止事件冒泡

.self 当事件在该元素本身触发时才触发事件

.capture 添加事件侦听器是,使用事件捕获模式

.prevent 阻止默认事件

.once 事件只触发一次

这个大家可以使用三个嵌套的div 就可以实现想要的操作;

值得注意的.self不会阻止时间冒泡,在其父辈的元素,也会响应;

还有要说的就是,v-on,还可以绑定 键盘事件,并且可以多个一起使用

常用的事件修饰符按键别名:

.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right
.ctrl
.alt
.shift
.meta (window键)

v-model 的事件修饰符:

.lazy, 一次性输完了,才会将数组,绑定,(按下enter键才会生效)
.number ,在表单提交的时候input中的输数字默认会转成字符串的类型
.trim ,会将输入中的空格给去除掉;


由于这些事件是动态的就不给大家演示了,大家有空可以自己试试,自己尝试过了,才会理解的更加深刻


再说说input 的一些相关事宜
input中type 使用number 类型时,禁止输入其他的东西,否则会自动删除

从input框获取焦点到,输入值,失去焦点这个过程所有事件

onfocus -> 键盘输入 -> onkeydown -> onkeypress -> onkeyup ->
oninput -> 失去焦点 -> onchange -> onblur

onfocus

是当焦点转移到(点击,tab切换) input 框上边的时候触发;

onkeydown

键盘按下的时候触发,但是此时按下的值并没有被输入到 input ,所以,此时的 value 没有值,或者说它的值 只能是之前的旧值

另外,此时可以阻止按键的默认事件;

onkeypress

按键在按下之后,并且是按键松开之前触发的;

和 keydown 一样不能获取新的到 value;此时,也可以阻止按键的默认事件;

但是这个事件对一下按键的支持不好,一些非输入性质的按键(如;delete, backspare)不支持;(除enter);

oninput

这个事件很贼,它的触发时机,从上面就可以看到,onpress 之后 onkeyup 之前;

此时,已经可以拿到 value,不能拿到keycode,不可以阻止默认事件了 ;

关键是这货明明是每次输入框的值变化时候出发的,抢了onchange 的饭碗;

另外,这东西是新的,IE9以下不支持,需要使用 onpropertychange;

还有这货,仅仅在input, textarea 支持;


onkeyup

按键在松开之后触发的;

能获取新的到 value,keycode;此时,不可以阻止按键的默认事件;

onchange

你敢说这是你认识的onchange吗?反正我是不敢;在失去焦点之后触发的,明明是 onchange 为什么是在失去焦点后触发的,还偏偏比 onblur 快;

能获取新的到 value,不能拿到 keycode;此时,不可以阻止按键的默认事件;

onblur

失去焦点时候触发,但是还是比 onchange 慢了;

能获取新的到 value,不能拿到 keycode;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值