Vue Template 修饰符和简写,让开发效率有所提高

稜镜断言
• 阅读 2917
作者:John Au-Yeung
译者:前端小智
来源:websystemer
点赞再看,养成习惯

本文 GitHub https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料。欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。

Vue 是一个易于使用的Web应用程序框架,可用于开发交互式前端应用程序。在本文中,我们将介绍指令的修饰符和一些有用的模板简写指令。

修饰符

修饰符用于以特殊方式绑定指令。

事件修饰符

例如,v-on指令的.prevent修饰符将在设置为该值的事件处理函数上自动运行event.preventDefault

.prevent修饰符用法如下:

<form v-on:submit.prevent="onSubmit"> ... </form>

这样,当运行onSubmit事件之前就会运行event.preventDefault()

其他事件修饰符包括:

  • .stop
  • .capture
  • .self
  • .once
  • .passive

.stop在运行其余事件处理程序代码之前运行event.stopPropagation()

.capture让我们捕获事件。 也就是说,当我们在内部元素中运行事件处理程序时,相同的事件处理程序也将在外部元素中运行。

例如,假设 src/index.js中的内容为:

 var vm=new Vue({
    el:"#app",
    data:{
        
    },
    methods:{
        show:function(){
            console.log("这是app的方法")
        },
        show2:function(){
            console.log("这是app2的方法")
        },
        show3:function(){
            console.log("这是app3的方法")
        }
    }
})

以及index.html中内容为:

<div id="app" v-on:click="show">
    1
    <div id="app2" v-on:click.capture="show2">
        2
        <div id="app3" v-on:click="show3">
            3
            
        </div>
    </div>
</div>

此处的代码因为div2有capture关键字,所以此时冒泡的顺序发生了改变

正常情况下:

点击div3一层一层冒泡,先div3=》div2=》div1

使用了关键字:

点击div3时,先div2=》div3=》div1

就是说只要存在一个capture关键字,就会影响整个嵌套的执行

.self 修饰符的作用是:只当在 event.target 是当前元素自身时触发处理函数,即事件不是从内部元素触发的 。

.once 修饰符的作用是:点击事件将只会触发一次

passive 作用

  详情请参考MDN(https://developer.mozilla.org...)中关于addEventListener中的第三个参数;表示 listener 永远不会调用 preventDefault()。如果 listener 仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告。

passive这个修饰符会执行默认方法。你们可能会问,明明默认执行为什么会设置这样一个修饰符。这就要说一下这个修饰符的本意了。

浏览器只有等内核线程执行到事件监听器对应的 JS 代码时,才能知道内部是否会调用preventDefault函数来阻止事件的默认行为,所以浏览器本身是没有办法对这种场景进行优化的。这种场景下,用户的手势事件无法快速产生,会导致页面无法快速执行滑动逻辑,从而让用户感觉到页面卡顿。

通俗点说就是每次事件产生,浏览器都会去查询一下是否有preventDefault阻止该次事件的默认动作。我们加上passive就是为了告诉浏览器,不用查询了,我们没用preventDefault阻止默认动作。

这里一般用在滚动监听,@scoll@touchmove 。因为滚动监听过程中,移动每个像素都会产生一次事件,每次都使用内核线程查询prevent会使滑动卡顿。我们通过passive将内核线程查询跳过,可以大大提升滑动的流畅度。

注:passive和prevent冲突,不能同时绑定在一个监听器上。

v-model 修饰符

v-model 主要有三个修饰符:

  • .lazy
  • .number
  • .trim

.lazy修饰符

<input v-model.lazy="msg" >

添加了lazy后,输入框中的数据会在change事件中同步,不会随着输入同时同步。

.number修饰符

首先谁明这个number并不是限制用户的输入,而是将用户输入的数据尝试绑定为 js 中的 number 类型

举个例子,如果用户输入300,data 中绑定的其实是'300'(string),添加 number 指令后可以得到 300(number)的绑定结果。而如果用户输入的不是数字,这个指令并不会产生任何效果。

.trim修饰符

trim可以用来过滤前后的空格

指令简写

Vue 中的一些指令可以简写。

v-bind

我们可以将v-bind简写为:,例如:

<a v-bind:href="url">Link</a>

可以写成

<a :href="url">Link</a>

如果使用Vue 2.6.0或更高版本,我们还可以使用动态参数:

<a :[key]="url">Link</a>

v-on

我们可以将v-on简写为@,例如:

<a v-on:click="onClick">Click me</a>

可以写成

<a @click="onClick">Click me</a>

同样,从Vue 2.6.0开始,我们也可以使用动态参数:

<a @[event]="onClick">Click me</a>

总结

一些指令具有与它们关联的修饰符。v-on指令具有多个修饰符,用于控制事件处理程序的调用方式。

另外,v-model指令也具有一些修饰符,可让我们将输入自动转换为数字或修剪输入中的空格。

v-onv-bind也有简写形式。 v-on:可以简写为@,而v-bind:可以缩写为

指令参数也可以使用简写。


代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

https://www.websystemer.no/vu...


交流

文章每周持续更新,可以微信搜索「 大迁世界 」第一时间阅读和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 已经收录,整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,另外关注公众号,后台回复福利,即可看到福利,你懂的。

Vue Template 修饰符和简写,让开发效率有所提高

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
React Hooks实现异步请求实例—useReducer、useContext和useEffect代替Redux方案
<blockquote本文是学习了2018年新鲜出炉的ReactHooks提案之后,针对<strong异步请求数据</strong写的一个案例。注意,本文假设了:<br1.你已经初步了解<codehooks</code的含义了,如果不了解还请移步<ahref"https://reactjs.org/docs/hooksintro.html
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Java 9版本之后Base64Encoder和Base64Decoder无法继续使用解决办法
<divclass"htmledit\_views"id"content\_views"<p在项目开发过程中,因为重装系统,安装了Java10版本,发现sun.misc.Base64Encoder和sun.misc.Base64Decoder无法使用。</p<p<br</p<p<strong原因:</strong</p<p查看
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
MBR笔记
<bochs:100000000000e\WGUI\Simclientsize(0,0)!stretchedsize(640,480)!<bochs:2b0x7c00<bochs:3c00000003740i\BIOS\$Revision:1.166$$Date:2006/08/1117