当前位置: 首页 > Web前端 > HTML5

vue修饰符——可能是东半球最详细的文档了(滑稽)

时间:2023-04-05 13:38:06 HTML5

为了方便大家写代码,vue.js为大家提供了很多方便的修饰符,比如我们常用的取消冒泡,防止默认事件等等~李雷博客插个广告目录表单修饰符事件修饰符鼠标键修饰符键值修饰符v-bind修饰符(真不知道叫什么)表单修饰符填表,最常用的是什么?输入!v-model~而我们的修饰符的存在就是为了简化这些事情。lazy

{{value}}

从这里开始我们可以看到,当我们还在打字,光标还在的时候,后面的值就已经出来了,可以说是非常实时了。但有时我们希望在输入所有内容后光标离开时更新视图。

{{value}}

这样就够了~这只是当我们的光标离开输入框的时候,它会更新视图,相当于在onchange事件中触发更新。.trim在我们的输入框中,经常需要过滤一些兄弟输入密码后不小心输入空格的内容。为了让你看的更清楚,我改了样式,不过问题不大,相信你已经看清楚了,没有left和这个大helloSpace的右侧,即使你在输入框中砸了空格键。需要注意的是,它只能过滤前导和尾随的空格!第一个和最后一个,中间的不会被过滤。number看名字就知道应该是限制数字的输入或者将输入转换成数字,不过不至于太火急单。如果您先输入数字,它将限制您只能输入数字。如果先输入字符串,就相当于不加.number事件修饰符。stop由于事件冒泡机制,当我们给元素绑定点击事件时,父级的点击事件也会被触发。ok
//jsshout(e){console.log(e)}//1//2一键停止事件冒泡,太方便了。相当于调用了event.stopPropagation()方法。ok
//只输出1.prevent用于防止默认行为该事件,例如,防止在单击提交按钮时提交表单。相当于调用了event.preventDefault()方法。注意:可以同时使用多个修饰符,但顺序可能会有所不同不同的。使用v-on:click.prevent.self将阻止所有点击,而v-on:click.self.prevent只会阻止对元素本身的点击。即从左往右判断~.self只有在事件绑定的元素自身触发事件时才会触发回调。如下图,刚才我们从.stop得知,子元素会冒泡到父元素,触发父元素的点击事件。当我们添加这个.self的时候,我们点击按钮,不会触发父元素的点击事件呼喊。只有当你点击父元素(蓝色背景)的时候才会喊~从thisself的英文翻译是'self,itself'可以看出这个修饰符的用法ok
.once这个修饰符就像名字一样简单粗暴,只能使用一次,就是bound事件以后只能触发一次,不会触发第二次。//按键盘坏只能喊一次ok.capture从上面我们知道事件的冒泡。其实完整的事件机制是:捕获阶段——目标阶段——冒泡阶段。默认情况下,事件触发器是从目标冒泡。当我们添加这个.capture时,我们做相反的事情,从包含这个元素的最上层到最下层触发事件。obj1obj2obj3obj4
//1243从上面的例子中,当我们点击obj4的时候,我们可以很明显的看出区别,obj1和obj2在事件在capture阶段触发,所以先是1再2,后面obj3和obj4是默认冒泡阶段触发的,所以先是4再冒泡到3~.passive我们在监听element的时候scrolling事件,它会一直触发onscroll事件,在PC端是没有问题的,但是在移动端,它会让我们的网页变得卡顿,所以当我们使用这个修饰符的时候,相当于加了一个.lazy修饰符到滚动事件....native我们经常会写很多小组件,一些小组件可能会绑定一些事件,但是,像下面这样的绑定事件是不会被触发的。必须使用.native来修改点击事件(即),可以理解这个修饰符的作用是将一个vue组件转换成一个普通的html标签。注意:使用.native修饰符操作普通的HTML标签会导致事件失败鼠标按键修饰符我们刚才讲了这个点击事件,我们一般都是用左键来触发,有时候我们需要改变右键菜单什么的,就需要用到右键或者中键,这次我们需要用鼠标Button修饰符.left左键点击.right右键点击.middle中键点击ok键修饰符其实这也是一种事件modifier,因为它是用来修改onkeyup,onkeydown等键盘事件的。如果keyCode不使用keyCode修饰符,那么我们每次按下键盘,都会触发喊叫。当我们要指定某个键被按下触发喊话时,这个修饰符就派上用场了,具体键码见键码对应表为为了方便起见,vue为一些常用的键提供了别名//Commonkey.enter.tab.delete//(捕获“delete”和“backspace”键).space.esc.up.down.left.right//系统修饰符key.ctrl.alt.meta.shift可以通过Globalconfig.keyCodes对象自定义键修饰符alias://可以使用`v-on:keyup.f1`Vue.config.keyCodes.f1=112我们可以看到上面说按键分为普通键和系统修改键,有什么区别?当我们编写下面的代码时,会发现如果只使用系统修饰键是无法触发keyup事件的。那我该怎么办?我们需要将系统修改键与其他键码关联起来,比如这样当我们同时按下ctrl+c时,将触发keyup事件。另外,如果是鼠标事件,可以单独使用系统修饰符。确定确定ok大概是什么意思,就是不能用一根手指(至少两根手指,也可以多一根)使用系统修饰键的修饰符。您可以用一个手指按住系统修改键并按住另一个键来实现键盘事件。也可以用一个手指按住系统修饰键,另一只手按住鼠标,实现鼠标事件。.exact(newin2.5)我们在上面提到了这个系统修改键,当我们像这样绑定点击键时令人惊讶的是,我们按下几个系统修饰键同时触发,比如ctrlshift点击,也可以触发,可能有一些场景我们只需要或者只能按一个系统修饰键触发(比如做一些快捷键的时候),但是不能当我们按下ctrl和其他键时被触发。然后这样写。注意:这仅限制系统修改键。像下面这样写完后,仍然可以按ctrl+c、ctrl+v或ctrl+常用键触发,但不能按ctrl+shift+常用键触发。ok然后你可以同时按下enter+common键来触发下面的,但是你不能按下系统修饰符键+输入触发器。相信你已经能理解8~v-bindmodifier.sync(2.3.0+new)在某些情况下,我们可能需要“双向绑定”一个道具。不幸的是,真正的双向绑定会带来维护问题,因为子组件可以修改父组件,而父组件或子组件的更改源都没有。我们通常的做法是//父组件//jsfunc(e){this.bar=e;}//子组件jsfunc2(){this.$emit('update:myMessage',params);}现在这个.sync修饰符简化了上面的步骤//parentcomponent//Subcomponentthis.$发出('更新:myMessage',参数);这样确实方便了很多,但是也有很多需要注意的地方。使用sync时,子组件传过来的事件名必须是update:value,值必须和子组件中props声明的名字完全一样(比如上例中的myMessage,my-message不能是用过的)。请注意,带有.sync修饰符的v-bind不能与表达式一起使用(例如,v-bind:title.sync="doc.title+'!'"是无效的)。相反,您只能提供要绑定的属性的名称,类似于v-model。在文字对象上使用v-bind.sync,例如v-bind.sync="{title:doc.title}",将无法正常工作,因为在解析像这样的复杂表达式时,需要考虑许多边缘情况..prop要学习这个修饰符,首先要了解这两个东西的区别。Property:节点对象存储在内存中的属性,可以访问和设置。属性:节点对象的属性(property)之一,值为对象。可以通过点访问方式document.getElementById('xx').attributes或者document.getElementById('xx').getAttributes('xx'),通过document.getElementById('xx').setAttribute('xx')来读取',value)添加和修改。标签中定义的所有属性,包括HTML属性和自定义属性,都将作为键值对存在于属性对象中。其实attribute和property这两个词翻译成attribute,只是《javascript高级程序设计》翻译成特征和属性,以示区别。//这里的id,value,style都属于property//index属于attribute//id、title等都是属性和特征。修改属性,其对应的特性会发生变化;修改属性,属性也会改变//input.index===undefined//input.attributes.index===this.index从上面我们可以看出,如果直接使用v-bind绑定,默认会绑定到dom节点的属性上。为了通过自定义属性存储变量,避免暴露数据,防止HTML结构污染,我们可以使用这个修饰符,如下//input.index===this.index//input.attributes.index===undefined.camel由于HTML属性不区分大小写。实际上会渲染为这会导致渲染失败,因为SVG标签只识别viewBox,但不知道是什么一个视图框是。如果我们使用.camel修饰符,它将呈现为驼峰命名法。此外,如果您使用字符串模板,则没有这些限制。newVue({template:''})最后不知道有没有漏油如有泄露,请在评论区告诉我。大家有什么建议或者意见也可以提出来,谢谢~