Vue.js学习笔记之修饰符详解


Posted in Javascript onJuly 25, 2017

本篇将简单介绍常用的修饰符。

在上一篇中,介绍了 v-model 和 v-on 简单用法。除了常规用法,这些指令也支持特殊方式绑定方法,以修饰符的方式实现。通常都是在指令后面用小数点“.”连接修饰符名称。

一、v-model的修饰符

 v-model 是用于在表单表单元素上创建双向数据绑定的指令。在 <input> 和 <textarea> 上,默认通过监听元素的 input 事件来更新绑定的属性值。

为了能明显的看到绑定属性值的变化,需要在Chrome浏览器中安装Vue Devtools扩展程序。当查看Vue开发的页面时,按F12就可以在开发者工具里看到Vue页签。这里需要注意,只有在引用Vue的开发版本文件,即vue.js文件时,Vue Devtools工具才能正常使用。

.lazy

首先在 vm 对象中增加需要绑定的属性

var vm = new Vue({
   el: "#app",
   data: {
     input_lazy: ""
   }
 });

在页面中的 input 的元素上添加指令

<div class="row">
   <h2>v-model.lazy</h2>
   <input type="text" v-model.lazy="input_lazy" />
 </div>

打开页面,开启Vue Devtools,在文本框中输入字符,查看属性值变化

Vue.js学习笔记之修饰符详解

当在文本框输入内容,并且光标焦点没有离开文本框时,属性值没有实时发生变化

Vue.js学习笔记之修饰符详解

而当焦点离开文本框时,属性值发生了变化并与文本框内容保持一致。从这个例子可以看出 .lazy 修饰符延迟了同步更新属性值的时机。即将原本绑定在 input 事件的同步逻辑转变为绑定在 change 事件上。

.number

该修饰符用来将输入内容自动转换成数值。

vm 对象里增加一个属性,默认为空字符串

var vm = new Vue({
   el: "#app",
   data: {
     input_number: ""
   }
 });

在页面的 input 元素上添加指令

<div class="row">
   <h2>v-model.number</h2>
   <input type="text" v-model.number="input_number" />
   <hr />
 </div>

打开页面,在文本框内输入内容,查看绑定属性值的变化

Vue.js学习笔记之修饰符详解

当开始输入数字时,属性值将实时更新成Number类型的数值。数字后输入其他非数字的字符,属性值将不再变化。

Vue.js学习笔记之修饰符详解

而当开始输入非数字的字符串时,因为Vue无法将字符串转换成数值,所以属性值将实时更新成相同的字符串。即使后面输入数字,也将被视作字符串。

.trim

该修饰符用来自动过滤字符串前后的空字符。

vm 对象中增加一个属性,默认为空字符串

var vm = new Vue({
   el: "#app",
   data: {
     input_trim: ""
   }
 });

input 上添加指令

<div class="row">
   <h2>v-model.trim</h2>
   <input type="text" v-model.trim="input_trim" />
   <hr />
 </div>

打开页面,在文本框输入内容,并在内容前后添加多个空格

Vue.js学习笔记之修饰符详解

Vue会自动过滤掉前后的多个空格,最终属性值是前后没有空字符的字符串。

二、v-on的修饰符

绑定的事件修饰符可以改变事件的触发方式。

.stop

该修饰符将阻止事件向上冒泡。同理于调用 event.stopPropagation() 方法

vm 对象里添加两个事件

var vm = new Vue({
   el: "#app",
   methods: {
     div_click: function () {
       console.log("div click...");
     },
     stop_click: function () {
       console.log("stop_click...");
     }
   }
 });

将上面两个方法绑定到一组具有父子关系的元素上

<div class="row">
   <h2>v-on.stop</h2>
   <div @click="div_click">
     <button type="button" @click.stop="stop_click">StopPropagation</button>
   </div>
   <hr />
 </div>

打开页面,并点击按钮,查看控制台打印结果

Vue.js学习笔记之修饰符详解

按照事件冒泡原理,点击按钮时,从当前触发的元素开始,沿着它的父元素一直到根元素,都会依次触发 click 事件。但是应用了 .stop 修饰符后,将只会触发当前元素的 click 事件,并阻止事件向上冒泡。

.prevent

该修饰符会阻止当前事件的默认行为。同理于调用 event.preventDefault() 方法

vm 对象里添加一个测试方法

var vm = new Vue({
   el: "#app",
   methods: {
     form_submit: function () {
       console.log("form submit!");
     }
   }
 });

页面添加一个 form 表单,并绑定表单的提交事件

<div class="row">
   <h2>v-on.prevent</h2>
   <form @submit.prevent="form_submit">
     <button type="submit">Submit</button>
   </form>
   <hr />
 </div>

当点击提交按钮时,会触发绑定的事件,并且阻止表单提交并刷新当前页面的默认行为。

.self

该指令只当事件是从事件绑定的元素本身触发时才触发回调

修改上面 .stop 的例子,在父元素 div 上添加样式

<div class="row">
   <h2>v-on.self</h2>
   <div @click.self="div_click" style="display:inline-block; width: px; background-color:red;">
     <button type="button" @click="stop_click">Button</button>
   </div>
   <hr />
 </div>

打开页面

Vue.js学习笔记之修饰符详解

因为父元素比它的子元素要长,所以右侧会有一部分红色的父元素显示出来。分别点击按钮和红色区域,查看控制台打印结果

Vue.js学习笔记之修饰符详解

因为 div_click 事件被修饰符绑定,只有在直接点击到父元素 div ,即红色区域内,事件才会被触发。

即使点击了它的子元素触发了子元素的事件,按照事件冒泡原理,父元素的事件应当被触发,但是因为事件的触发源并不是事件绑定的元素本身,所以父元素事件不会被触发。

.one

该修饰符表示绑定的事件只会被触发一次

vm 对象中添加一个测试方法

var vm = new Vue({
   el: "#app",
   methods: {
     once_click: function () {
       console.log("once click...");
     }
   }
 });

页面添加一个按钮,绑定事件

<div class="row">
   <h2>v-on.once</h2>
   <button type="button" @click.once="once_click">Button</button>
   <hr />
 </div>

打开页面,多次点击按钮。只有在第一次点击时,事件才会触发。

键值修饰符

该修饰符可以用来监听键盘事件

vm 对象中添加一个测试方法

var vm = new Vue({
   el: "#app",
   methods: {
     enter_click: function () {
       console.log("enter click...");
     }
   }
 });

页面增加一个 input 元素,监听键盘事件

<div class="row">
   <h2>键值修饰符</h2>
   <input type="text" @keyup.="enter_click" />
   <hr />
 </div>

打开页面,在文本框输入内容,并按回车,查看控制台打印结果

Vue.js学习笔记之修饰符详解

通过 keyup.keyCode 的方式来监听键盘特定按键的事件。也可以通过按键名称来监听

<input type="text" @keyup.enter="enter_click"/>

也可以自定义按键名称

// 自定义按键名称
 Vue.config.keyCodes.ent = 13;
 
 // 页面引用
 <input type="text" @keyup.ent="enter_click"/>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 贪吃蛇实现代码
Nov 22 Javascript
js二维数组定义和初始化的三种方法总结
Mar 03 Javascript
js自定义鼠标右键的实现原理及源码
Jun 23 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 Javascript
JQuery右键菜单插件ContextMenu使用指南
Dec 19 Javascript
JavaScript的this关键字的理解
Jun 18 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
Aug 15 Javascript
AngularJS实现的简单拖拽功能示例
Jan 02 Javascript
微信小程序canvas绘制圆角base64图片的实现
Aug 18 Javascript
javascript中的相等操作符(==与===区别)
Dec 21 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
Jul 09 Javascript
如何基于viewport vm适配移动端页面
Nov 13 Javascript
ES6正则表达式扩展笔记
Jul 25 #Javascript
简单实现js拖拽效果
Jul 25 #Javascript
Vue实现一个返回顶部backToTop组件
Jul 25 #Javascript
基于jquery实现多级菜单效果
Jul 25 #jQuery
关于TypeScript中import JSON的正确姿势详解
Jul 25 #Javascript
微信JSSDK调用微信扫一扫功能的方法
Jul 25 #Javascript
利用node.js爬取指定排名网站的JS引用库详解
Jul 25 #Javascript
You might like
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
浅谈javascript事件环微任务和宏任务队列原理
2020/09/12 Javascript
基于python操作ES实例详解
2019/11/16 Python
wxPython实现画图板
2020/08/27 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
后勤部经理岗位职责
2014/02/23 职场文书
大学军训感言200字
2014/02/26 职场文书
《泉水》教学反思
2014/04/11 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
单位单身证明样本
2014/10/11 职场文书
婚前财产协议书范本
2014/10/19 职场文书
2014年接待工作总结
2014/11/26 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书