阿里面试官级别很高,Vue 32个修饰符,你不一定全知道,前端面试题2024答案

本文介绍了Vue.js中的事件处理函数如onClickBtn和onMousedown,以及鼠标和键盘的监听,包括鼠标键位、trim和lazy修饰符的使用,number类型处理,系统修饰符(如.ctrl、.alt、.shift、.meta)和自定义修饰符的功能,以及针对不同按键的事件监听(如enter、tab等)。此外,还提到了前端开发中常用的HTML、CSS、JavaScript和Vue框架,以及面试中可能涉及的高频考点。
摘要由CSDN通过智能技术生成

onClickBtn (msg) {

console.log(msg)

},

onMousedown (event) {

const mosueMsgMap = {

0: ‘鼠标左键’,

1: ‘鼠标中键’,

2: ‘鼠标右键’

}

console.log(‘点击了’, mosueMsgMap[event.button])

}

}

}

没有带鼠标回来,中键点击暂时不能演示,后续会补上

ef10a9e17436458a5c5783db3296bc9c.gif

mouse.gif

11 .left


同上例子,监听鼠标左键点击

12 .right


同上例子,监听鼠标右键点击

13 .middle


同上例子,监听鼠标中键点击

表单相关修饰符

=======

14 .trim


对于输入的内容,希望可以过滤首尾空格应该怎么做呢?

用户名:{{ name }}

用户名2:{{ name2 }}

export default {

name: ‘trim’,

data () {

return {

name: ‘’,

name2: ‘’,

}

},

watch: {

name (newVal) {

console.log('----${newVal}----')

},

name2 (newVal) {

console.log('----${newVal}----')

},

}

}

.trim修饰符可以很方便做到

b325c8c4936228c981baca046bc1f358.gif

trim.gif

15 .lazy


v-model大家都很熟悉,默认情况下,每次input事件触发的时候都会将输入框的值与其绑定的数据进行实时同步。但是如果想要实现光标离开的时候再更新数据如何实现呢?

思路1: 绑定change事件,在事件回调中手动获取target的值

思路2: 直接使用.lazy修饰符即可达到效果

无.lazy: {{ text }}

.lazy: {{ text2 }}

export default {

name: ‘lazy’,

data () {

return {

text: ‘’,

text2: ‘’

}

}

}

可以看到添加了.lazy修饰符之后,第二个输入框输入的值不会实时反应在下面,而是光标离开实,text2的数据才更新了

f2315fce94c508bfed49044292cd8df1.gif

lazy.gif

16 .number


我们知道input输入框的type哪怕是number得到的值的类型也是string,如果我们想直接拿到number类型的数据,有不想麻烦的手动转换应该怎么办呢?

无.number 

type:text .number 

type:number .number 

export default {

name: ‘lazy’,

data () {

return {

number: 0,

number1: ‘’,

number2: ‘’,

}

},

watch: {

number (newVal) {

console.log(typeof newVal, newVal)

},

number1 (newVal) {

console.log(typeof newVal, newVal)

},

number2 (newVal) {

console.log(typeof newVal, newVal)

},

}

}

  1. 第一个输入框的类型是number,但是得到的值是string

  2. 第二个输入框的类型是text,但是添加了number修饰符,得到的值可以是number(如果这个值无法被 parseFloat() 解析,则会返回原始的值。)

  3. 第三个输入框的类型是number,最后得到的值也是number

a5b51925178e2ba616dda0178b2894ec.gif

number.gif

系统修饰符

=====

当点击事件或者键盘事件需要系统键同时按下才触发时.ctrl.alt.shift.meta可以帮大忙噢!

如下代码

  1. 全局监听keydown事件,尝试看.ctrl.alt.shift.meta是否被按下

  2. 分别给四个按钮加上 .ctrl.alt.shift.meta修饰符并配合点击事件,验证是否同时按下指定按键,再点击才会生效

注明:电脑ctrl键 + 点击估计和浏览器快捷配置冲突了,导致没触发

{{ msg }}

<button @click.ctrl=“onClickButon(‘ctrl’)”>ctrl

<button @click.alt=“onClickButon(‘alt’)”>alt

<button @click.shift=“onClickButon(‘shift’)”>shift

<button @click.meta=“onClickButon(‘meta’)”>meta

  

export default {

name: ‘system’,

data () {

return {

msg: ‘’

}

},

mounted () {

this.onListenSystemKeyDown()

},

methods: {

onListenSystemKeyDown () {

document.addEventListener(‘keydown’, (event) => {

let msg = ‘按下了’

if (event.ctrlKey) {

msg += ‘ctrl键’

} else if (event.altKey) {

msg += ‘alt键’

} else if (event.shiftKey) {

msg += ‘shift键’

} else if (event.metaKey) {

msg += ‘meta键’

} else {

msg += ‘其他键’

}

this.msg = msg

}, false)

},

onClickButon (key) {

console.log(只有同时按下${key}键,点击事件才会发生)

}

}

}

4d05735f08cc6a632b19ae9afb06c73d.gif

system.gif

17 .ctrl


仅在按下ctrl按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

18 .alt


仅在按下alt按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

19 .shift


仅在按下shift按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

20 .meta


仅在按下meta按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

21 .exact


严格来说这.exact不属于系统修饰符,只是上面例子的写法有一个现象,同时按下几个系统修饰键(例如alt和shift)既可以触发.alt也可以触发.shift

还是用上面的例子,看一下下面的gif, 此时我同时按下了alt和shift,对应的两个事件都可以触发

ebaadb81c48a12fb58013be1f1f646e5.gif

system2.gif

  1. 只想某个系统修饰键按下时才触发点击

  2. 没有任何系统修饰符被按下的时候才触发点击

要实现上面的需求.exact就派上用场了,用上面的例子稍作改造

{{ msg }}

<button @click.ctrl.exact=“onClickButon(‘ctrl’)”>ctrl

<button @click.alt.exact=“onClickButon(‘alt’)”>alt

<button @click.shift.exact=“onClickButon(‘shift’)”>shift

<button @click.meta.exact=“onClickButon(‘meta’)”>meta

<button @click.exact=“onClickButon(‘非系统键’)”>非系统键

  

export default {

name: ‘extra’,

data () {

return {

msg: ‘’

}

},

mounted () {

this.onListenSystemKeyDown()

},

methods: {

onListenSystemKeyDown () {

document.addEventListener(‘keydown’, (event) => {

let msg = ‘按下了’

if (event.ctrlKey) {

msg += ‘ctrl键’

} else if (event.altKey) {

msg += ‘alt键’

} else if (event.shiftKey) {

msg += ‘shift键’

} else if (event.metaKey) {

msg += ‘meta键’

} else {

msg += ‘其他键’

}

this.msg = msg

}, false)

},

onClickButon (key) {

console.log(只有同时按下${key}键,点击事件才会发生)

}

}

}

315b32eb10474ec95ea2cbf13dfaf9ce.gif

extra.gif

按键修饰符

=====

在监听键盘事件时,我们经常需要检查详细的按键再执行对应的逻辑,vue也为我们内置了至少11+的按键修饰符。

如下代码,我们分别给entertabdelete等按键指定了keydown事件,当在指定的输入框中按下指定的键盘,会打印出entertabdelete等,其他按键在输入框中无法触发该console

enter:

<input type=“text” @keydown.enter=“onKeydown(‘enter’)”>

tab:

<input type=“text” @keydown.tab=“onKeydown(‘tab’)”>

  

delete:

<input type=“text” @keydown.delete=“onKeydown(‘delete’)”>

  

esc:

<input type=“text” @keydown.esc=“onKeydown(‘esc’)”>

  

space:

<input type=“text” @keydown.space=“onKeydown(‘space’)”>

 

up:

<input type=“text” @keydown.up=“onKeydown(‘up’)”>

  

down:

<input type=“text” @keydown.down=“onKeydown(‘down’)”>

 

left:

<input type=“text” @keydown.left=“onKeydown(‘left’)”>

  

right:

<input type=“text” @keydown.right=“onKeydown(‘right’)”>

  

page-down:

<input type=“text” @keydown.page-down=“onKeydown(‘page-down’)”>

  

page-up:

<input type=“text” @keydown.page-up=“onKeydown(‘page-up’)”>

  

export default {

name: ‘keyModifiers’,

methods: {

onKeydown (keyName) {

console.log(keyName)

}

}

}

a68a25fb4556d390ef4f5eac719b3132.gif

key-modifiers.gif

22 .enter


在按下enter按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

23 .tab


在按下tab按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

24 .delete


在按下delete按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

25 .esc


在按下esc按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

26 .space


在按下space按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

27 .up


在按下up按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

28 .down


在按下down按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

29 .left


在按下left按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

30 .right


在按下right按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

31 .page-down


在按下(fn + down)按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

32 .page-up


在按下(fn + up)按键时才触发鼠标或键盘事件的监听器,详细例子请看上面

如何自定义按键修饰符

==========

vue本身给我们内置了很多实用的按键修饰符,大部分情况下可以满足我们的日常需求了,那么有没有办法可以自定义按键修饰符呢?

通过以下配置即可定义一个属于我们自己的按键修饰符, 比如我们定义q为按下q的快捷键。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

总结

秋招即将开始,校招的朋友普遍是缺少项目经历的,所以底层逻辑,基础知识要掌握好!

而一般的社招,更是神仙打架。特别强调,项目经历不可忽视;几乎简历上提到的项目都会被刨根问底,所以项目应用的技术要熟练,底层原理必须清楚。

这里给大家提供一份汇集各大厂面试高频核心考点前端学习资料。涵盖 HTML,CSS,JavaScript,HTTP,TCP协议,浏览器,Vue框架,算法等高频考点238道(含答案)

资料截图 :

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

高级前端工程师必备资料包

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

总结

秋招即将开始,校招的朋友普遍是缺少项目经历的,所以底层逻辑,基础知识要掌握好!

而一般的社招,更是神仙打架。特别强调,项目经历不可忽视;几乎简历上提到的项目都会被刨根问底,所以项目应用的技术要熟练,底层原理必须清楚。

这里给大家提供一份汇集各大厂面试高频核心考点前端学习资料。涵盖 HTML,CSS,JavaScript,HTTP,TCP协议,浏览器,Vue框架,算法等高频考点238道(含答案)

资料截图 :

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

高级前端工程师必备资料包

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值