vue常用修饰符及其作用

1.vue常用修饰符及其作用

.stop : 等同于 JavaScript 中的 event.stopPropagation() ,防止事件冒泡

.prevent : 等同于JavaScript 中的 event.preventDefault() ,防止执行预设的行为(如果事件可取消,则取消该事件,而不停止事件的进一步传播) :

.capture: 与事件冒泡的方向相反,事件捕获由外到内

.self !只会触发自己范围内的事件,不包含子元素

.once : 只会触发一次。

2.v-if、v-show、v-html 的原理

·v-if会调用addlfCondition方法,生成vnode的时候会忽略对应节点,render的时候就不会渲染v-show会生成vnode,render的时候也会渲染成真实节点,只是在render过程中会在节点的属性中修改show属性值,也就是常说的display;

v-html会先移除节点下的所有节点,调用html方法,通过addProp添加innerHTML属性,归根结底还是设置innerHTML为v-html的值,

3.v-if和v-show的区别

·手段: v-if是动态的向DOM树内添加或者删除DOM元素:V-show是通过设置DOM元素的display样式属性控制显隐

编译过程:v-i切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;Vshow只是简单的基于css切换:

编译条件: v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译:v-show是在任何条件下,无论首次条件是否为真,都被编译,然后被缓存,而且DOM元素保留:

性能消耗: v-if有更高的切换消耗: v-show有更高的初始渲染消耗

。使用场景: v-if适合运营条件不大可能改变: v-show适合频繁切换

4.v-model 是如何实现的,语法糖实际是什么?

(1)作用在表单元素上动态绑定了 input的 value 指向了 messgae 变量,并且在触发 input 事件的时候去动态把 message设置为目标值:

<input v-model="sth" />
// 等同于
<input
 v-bind:value="message"
 v-on:input="message=$event.target.value"
>
//$event 指代当前触发的事件对象;
//$event.target 指代当前触发的事件对象的dom;
//$event.target.value 就是当前dom的value值;
//在@input方法中,value => sth;
//在:value中,sth => value;

(2)作用在组件上

在自定义组件中,v-model 默认会利用名为 value 的 prop和名为 input 的事件

本质是一个父子组件通信的语法糖,通过prop和s.emit实现。因此父组件v-model 语法糖本质上可以修改为

<child :value="message" @input="function(e){message = e}"></child>

在组件的实现中,可以通过 v-model属性来配置子组件接收的prop名称,以及派发的事件名称。 例子

// 父组件
<aa-input v-model="aa"></aa-input>
// 等价于
<aa-input v-bind:value="aa" v-on:input="aa=$event.target.value"></aa-input>
// 子组件:
<input v-bind:value="aa" v-on:input="onmessage"></aa-input>
props:{value:aa,}
methods:{
 onmessage(e){
 $emit('input',e.target.value)
 }
}

默认情况下,一个组件上的v-model 会把 value 用作 prop且把 input 用作 event。但是一些输入类型比如单选 框和复选框按钮可能想使用 value prop 来达到不同的目的。使用 model 选项可以回避这些情况产生的冲突。js 监听input 输入框输入数据改变,用oninput,数据改变以后就会立刻出发这个事件。通过input事件把数据 $emit 出去,在父组件接受。父组件设置v-model的值为input $emit过来的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值