浅入深出Vue:事件处理
上一篇的最后留下了一个 v-on
的思考,也就是本章的主题:事件处理
为什么需要事件处理
在前端开发中,经常要面对各种表单、按钮。而这里面就住着一个事件:点击 (click)。
前端童鞋们肯定不陌生它,因为经常会出现。比如说:
表单提交
各式各样的按钮
列表多级菜单折叠
v-on
支持监听原生的 DOM
事件,也就是 vue
中也支持以前纯js写法中各式各样的时间,只是在 vue
中换了一种写法。
使用事件处理的好处便在于我们可以通过事件来控制数据。
MVVM中强调的一点便是数据驱动,那么在 vue
中如果利用数据去驱动视图呢,上一篇讲了双向绑定。绑定上去了,如果没办法对数据进行操作,那就变成了单向渲染了。对于这个问题,解决的方案便是:事件处理,利用事件去控制数据变化,再由数据的变化驱动着视图。
事件处理是什么
这一个问题在上面已经给出答案了:
从字面上理解,它就是DOM事件,只不过在
vue
中使用方式不同。深层次理解,它是控制数据变化的控制器,是连接视图与数据的桥梁。
如何使用
通过按钮标签来看一下事件处理的写法:
<button v-on:需要响应的事件名="处理事件的函数名"></button>
这里需要注意一点:
- 处理事件的函数名必须写在
methods
中,要让当前组件实例可访问。
还是继续昨天的例子,这里让我们解决最后一个问题:
- 利用按钮的点击事件来改变
isDark
的值。
首先页面上加上按钮:
<template>
<div>
<h1 v-bind:class="isDark ? 'dark' : 'light'">{{ formatTime(time) }}</h1>
<a v-for="(item, index) in urlList" v-bind:key="index" v-bind:href="item.url">{{item.text}}</a>
<br/><button v-on:click="change">改变背景</button>
</div>
</template>
这里我们指定响应 click
事件的函数名是 change
,接着我们去定义我们的函数:
methods: {
change: function() {
this.isDark = !this.isDark
}
}
代码很简洁,因为这是个布尔值,我们直接取反就好了。
来看看效果:
现在是白色的,让我们点一下看看:
点完之后变黑了,再点击一次又变回白色了~ 很完美的达到了我们的要求。
还可以通过其他的事件来完成一些特效,比如:
输入框在失去焦距时的自动验证
鼠标移动到元素上时弹出提示文字
等等。
事件修饰符
如果我们只想让这个按钮生效一次怎么办?
点了一次之后,就不再让它继续变了。
vue
在这方便提供了事件修饰符,目的就是为了避免开发者们手动去处理原生事件的一些逻辑。
语法如下:
<button v-on:事件名.事件修饰符="处理函数"></button>
所有的修饰符在下表列出:
.stop
.prevent
.capture
.self
.once
.passive
修饰符可以同时使用多个:
<button v-on:事件名.事件修饰符1.事件修饰符2.事件修饰符3="处理函数"></button>
上述修饰符待后面我们具体用到时再细细讲解,其中的一些修饰符拿出来甚至足够一篇长博文的内容了。
这里我们使用到的修饰符是:
.once
代码:
<template>
<div>
<h1 v-bind:class="isDark ? 'dark' : 'light'">{{ formatTime(time) }}</h1>
<a v-for="(item, index) in urlList" v-bind:key="index" v-bind:href="item.url">{{item.text}}</a>
<!-- 在click后面添加 once 修饰符 -->
<br/><button v-on:click.once="change">改变背景</button>
</div>
</template>
先看看点击前的效果:
现在是黑色的,点击之后:
毫无疑问这里肯定是白色的,重点是接下来的一次点击!:
没有变化,依旧是白色,再点一次,还是白色。.once
修饰符很好的解决了我们的需求。
写在文末
至此,对于 vue
中的一些基础语法,事件我们已经有了初步的了解和使用了。
接下来将要一起学习路由与组件这两大Boss了,有了它们,vue
开发会变得更加有趣和多变。
浅入深出Vue:事件处理的更多相关文章
- 浅入深出Vue:环境搭建
浅入深出Vue:环境搭建 工欲善其事必先利其器,该搭建我们的环境了. 安装NPM 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版本的NodeJS Windows安装程序 下载下来后,直 ...
- 浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置
浅入深出Vue之工具准备(二):PostMan安装配置 由于家中有事,文章没顾得上.在此说声抱歉,这是工具准备的最后一章. 接下来就是开始环境搭建了~尽情期待 工欲善其事必先利其器,让我们先做好准备工 ...
- 浅入深出Vue:工具准备之WebStorm安装配置
浅入深出Vue之工具准备(一):WebStorm安装配置 工欲善其事必先利其器,让我们先做好准备工作吧 导航篇 WebStorm安装配置 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版 ...
- 浅入深出Vue系列
浅入深出Vue导航 导航帖,直接点击标题即可. 文中所有涉及到的资源链接均在最下方列举出来了. 前言 基础篇 浅入深出Vue:工具准备之WebStorm搭建及配置 浅入深出Vue之工具准备(二):Po ...
- 浅入深出Vue:前言
浅入深出Vue系列文章 之前大部分是在做后端,后来出于某些原因开始接触Vue.深感前端变化之大,各种工具.框架令人眼花缭乱.不过正是这些变化,让前端开发更灵活. 博主在刚开始时,参考官网的各个步骤以及 ...
- 浅入深出Vue:第一个页面
今天正式开始入门篇,也就是实战了~ 首先我们是要做一个博客网站,UI 框架采用江湖传闻中的 ElementUI,今天我们就来利用它确定我们博客网站的基本布局吧. 准备工作 新建一个vue项目(可以参考 ...
- 浅入深出Vue:代码整洁之封装
深入浅出vue系列文章已经更新过半了,在入门篇中我们实践了一个小小的项目. <代码整洁之道>一书中提到过一句话: 神在细节中 这句话来自20世纪中期注明现代建筑大师 路德维希·密斯·范·德 ...
- 浅入深出Vue:文章列表
终于到我们小项目的最后一个功能了,那就是列表页展示! 新建组件 先来新建组件 List.vue: <template> <div></div> </templ ...
- 浅入深出Vue:自动化路由
在软件开发的过程中,"自动化"这个词出现的频率是比较高的.自动化测试,自动化数据映射以及各式的代码生成器.这些词语的背后,也说明了在软件开发的过程中,对于那些重复.千篇一律的事情. ...
随机推荐
- JAVA学习第三十三课(经常使用对象API) —迭代器
数字有非常多用数组存,对象有非常多就要用集合存 可是数组是固定长度的,集合是可变长度的 集合的由来: 对象用来封装特有数据,对象多了须要存储,假设对象个数不确定,就须要使用集合容器来存储 集合的特点: ...
- 介绍MFC参与设计模式框架(一个)
最近我读了一些相关MFC参与设计的花纹纸架,为了帮助您了解MFC在此框架总结,我们希望对大家有帮助. 简介设计模式 设计模式是一套被重复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计 ...
- 【C语言学习】C语言功能
代码,功能为了更好地实现模块化编程.那么,什么是函数的性质?在函数中定义的变量(全局变量.局部变量.静态变量)如何存储?为什么范围和全局变量和局部变量的寿命是不一样的?只是有一个更深入的了解的功能.能 ...
- cocos2d 滚动背景 举 无限
void Bird::update(float time){ auto bg=this->getChildByTag(200); auto bg1=this->getChildByTag( ...
- wpf border内部元素内边角溢出问题 裁剪效果
效果图 <Grid> <Border BorderThickness=" BorderBrush="#3c4d72" CornerRadius=&quo ...
- EF 两种删除方式的比较
UserInfo user = from u in context.UserInfo where u.Id=343 select u; context.UserInfo.Remove(user); 用 ...
- 修改window.external使JS可调用Delphi方法
原文地址:http://hi.baidu.com/rarnu/blog/item/4ec80608022766d663d986ea.html 在js中,有一个比较特殊的对象,即window.exter ...
- Cordova页面加载外网图片失败,Refused to load the image
原文:Cordova页面加载外网图片失败,Refused to load the image 1.使用Cordova页面加载外网图片失败,抛出异常 Refused to load the image ...
- CentOS搭建python开发环境
装了个CentOS 5.5,想在上面搭个python的开发环境,可是还是遇到了很多问题,记录一下过程: 1.python升级 查看python版本 python -V Python 2.4.3 因为p ...
- iOS UITableView动态隐藏或显示Item
通过改变要隐藏的item的高度实现隐藏和显示item 1.创建UITableView #import "ViewController.h" @interface ViewContr ...