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代码
Aug 13 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
Jan 15 Javascript
Jquery cookie操作代码
Mar 14 Javascript
基于datagrid框架的查询
Apr 08 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
判断JS对象是否拥有某种属性的两种方式
Dec 02 Javascript
jquery操作cookie插件分享
Jan 14 Javascript
Javascript核心读书有感之表达式和运算符
Feb 11 Javascript
Javascript通过overflow控制列表闭合与展开的方法
May 15 Javascript
JavaScript之filter_动力节点Java学院整理
Jun 28 Javascript
jQuery length 和 size()区别总结
Apr 26 jQuery
微信小程序自定义弹出模态框禁止底部滚动功能
Mar 09 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
javascript date格式化示例
2013/09/25 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
AI人工智能 Python实现人机对话
2017/11/13 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
nohup的用法
2012/11/26 面试题
企业消防安全制度
2014/02/02 职场文书
纠风工作实施方案
2014/03/15 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
校本教研活动总结
2014/07/01 职场文书
企业法人代表证明书
2014/09/27 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书