Vue语法糖因为昨天项目中遇到的bug,用语法糖可以完美解决。下面介绍一些比较常用的。问题描述:一个Modal,实现了点击窗体聚焦,点击外围失去聚焦的效果。表单点击在nextTick中聚焦,外设直接设置为失焦,但貌似测试环境和本地环境不一致。相同的代码表现不同,测试环境的parent会比nextTick中的执行更快失焦。解决方法:点击窗体,使用click.stop防止冒泡。总结常用的语法糖。停止:防止冒泡。native:直接在组件的根元素上监听本地事件。self:只有当event.target为当前元素本身时才触发处理函数(不防止冒泡,不可替代.stop)。capture:使用事件捕获方式(即内部元素触发的事件先在这里处理,然后交给内部元素处理)。once:只执行一次。lazy:默认情况下,v-model在每次触发输入事件后,都会将输入框的值与数据进行同步。您可以添加lazy修饰符以切换为使用change事件进行同步。number:将输入值转换为数值类型。trim:自动过滤用户输入的前导和尾随空白字符。prevent:拦截默认事件,比如submit会提交并重新加载Form,虽然默认事件冒泡后开始,但是不会停止,因为.stop阻止事件通过。passive:xx事件的默认行为将立即触发,无需等待其完成。这是什么意思?.passive修饰符将执行默认方法。您可能会问为什么默认设置这样的修饰符。这就是关于这个修饰符的初衷。>[浏览器只能知道是否会在内部调用preventDefault函数来阻止事件的默认行为,直到内核线程执行完事件监听器对应的JavaScript代码,所以浏览器本身没有办法优化这种场景。在这种场景下,用户的手势事件无法快速产生,会导致页面无法快速执行滑动逻辑,从而让用户感觉页面卡住了。】>通俗点说就是每次事件发生时,浏览器都会检查是否有preventDefault来阻止事件的默认动作。我们添加.passive是为了告诉浏览器不需要查询,我们没有使用preventDefault来阻止默认动作。>这个一般用于滚动监听,@scoll,@touchmove。因为在滚动监听过程中,每移动一个像素点都会产生一个事件,每次使用内核线程查询prevent,滑动都会卡住。我们通过passive跳过内核线程查询,可以大大提高滑动的流畅度。注意:被动和防止冲突不能同时绑定一个监听器。`passive`修饰符特别提高了移动设备的性能(不要将`.passive`与`.prevent`一起使用,因为`.prevent`将被忽略并且浏览器可能会向您显示警告。记住,`.passive`会告诉您_不想_阻止事件的默认行为的浏览器。)
