Vue学习笔记(三)
1 监听
在Vue.js中可以通过watch来监听数据的变化,比如通过watch实现的简单计数器:
<div id="app">
    <p>计数器:{{count}}</p>
    <button @click="count++">点我增加</button>
    <p id="info"></p>
</div>
var vm = new Vue({
	el: '#app',
	data:
	{
	    count:0
	}
})
vm.$watch('count',function(newValue,oldValue)
{
	document.getElementById("info").innerHTML = "修改前:"+oldValue+"<br>修改后:"+newValue;
})
效果如下:

watch有两个参数,一个是要监听的变量,另一个是回调函数,回调函数接受两个参数,第一个参数是新值,第二个参数是旧值。
下面再来看一下有关单位换算的例子:
<div id="app">
    吨:<input type="text" v-model="ton">
    千克:<input type="text" v-model="kilograms"><br>
    吨:<p id="tonInfo"></p>
    千克:<p id="kilogramsInfo"></p>
</div>
var vm = new Vue({
    el: '#app',
    data:
    {
        ton:0,
        kilograms:0
    },
    watch:
    {
        ton:function(val)
        {
            this.kilograms = (this.ton = val) * 1000;
        },
        kilograms:function(val)
        {
            this.ton = (this.kilograms = val) / 1000;
        }
    }
})
vm.$watch('ton',function(newValue,oldValue)
{
    document.getElementById("tonInfo").innerHTML = "修改前:"+oldValue+"<br>修改后:"+newValue;
})
vm.$watch('kilograms',function(newValue,oldValue)
{
    document.getElementById("kilogramsInfo").innerHTML = "修改前:"+oldValue+"<br>修改后:"+newValue;
})

2 样式绑定
class与style是HTML元素的属性,用于设置元素的样式,可以利用v-bind来设置样式属性。v-bind在处理class以及style时专门增强了,表达式的结果类型除了是字符串外,还能是对象或者数组。
2.1 class绑定
可以为v-bind:class设置一个对象,从而动态切换class:
<style>
    .active
    {
        width:100px;
        height: 100px;
        background: green;
    }
</style>
<div id="app">
    <div v-bind:class="{'active':isActive}"></div>
</div>
vm = new Vue({
	el: '#app',
	data:
	{
	    isActive:true
	}
})
也可以传入多个属性来动态切换多个class:
.class0
{
    width:100px;
    height: 100px;
}
.class1
{
    background: green;
}
.class2
{
    background: red;
}
<div id="app">
    <div class="class0" v-bind:class="{'class1':active1,'class2':active2}"></div>
</div>
var vm = new Vue({
    el: '#app',
    data:
    {
        active1:true,
        active2:true
    }
})
效果:

也可以利用对象进行简化:
<div id="app">
    <div class="class0" v-bind:class="classObject"></div>
</div>
var vm = new Vue({
    el: '#app',
    data:
    {
        classObject:
        {
            class1:true,
            class2:true
        }
    }
})
2.2 计算属性
在v-bind:class中除了是一个对象还能绑定返回对象的计算属性,比如:
<div id="app">
    <div v-bind:class="classObject"></div>
</div>
var vm = new Vue({
    el: '#app',
    data:
    {
        active1:true,
        error:{
            value:true,
            type:'fatal'
        }
    },
    computed:{
        classObject:function() {
            return {
                class0:true,
                class1: this.active1 && !this.error.value,
                class2: this.error.value && this.error.type === 'fatal'
            }
        }
    }
})
效果如下:

2.3 数组
也可以传递给v-bind:class一个数组,数组的元素为变量,变量的内容为对应的CSS类名:
<div id="app">
    <div v-bind:class="[active1,active2]"></div>
</div>
var vm = new Vue({
	el: '#app',
	data: {
	    active1:'class0',
	    active2:'class1'
	}
})
也可以利用三元表达式来切换:
<div id="app">
    <div v-bind:class="[active1,active2 ? 'class1' : 'class2']"></div>
</div>
3 内联样式
可以在v-bind:style中直接设置样式(注意前后带{}):
<div id="app">
    <div v-bind:style="{color:color,fontSize:fontSize+'px'}">测试</div>
</div>
var vm = new Vue({
    el: '#app',
    data: {
        color:'#FF0000',
        fontSize:30
    }
})
当然也可以像绑定class一样直接绑定到一个对象上:
<div id="app">
    <div v-bind:style="styleObject">测试</div>
</div>
var vm = new Vue({
    el: '#app',
    data: {
        styleObject: {
            color:'#FF0000',
            fontSize:'30px'
        }
    }
})
也可以使用数组进行绑定多个样式:
<div id="app">
    <div v-bind:style="[styleObject1,styleObject2]">测试</div>
</div>
var vm = new Vue({
    el: '#app',
    data: {
        styleObject1: {
            color:'#FF0000',
        },
        styleObject2:{
            fontSize:'30px'
        }
    }# 5
})
另外当v-bind:style需要特殊前缀的CSS时,比如transform,Vue会自动侦测并添加相应前缀。
4 事件处理
4.1 v-on
事件监听可以使用v-on:
<div id="app">
    <button v-on:click="count += 1">点击增加1</button>
    <p>这个按钮被点击了{{count}}次</p>
</div>
var vm = new Vue({
    el: '#app',
    data: {
        count:0
    }
})

通常来说单击按钮会触发一个方法调用,在methods中指定即可:
<div id="app">
    <button v-on:click="test">点击触发事件</button>
</div>
var vm = new Vue({
    el: '#app',
    methods:{
        test:function(){
            alert('Hello')
            //event表示是原生DOM事件
            if(event) {
                alert(event.target.tagName)
            }
        }
    }
})

当然也可以使用内联的JS语句:
<div id="app">
    <button v-on:click="say('hi')">Say hi</button>
    <button v-on:click="say('what')">Say what</button>
</div>
var vm = new Vue({
    el: '#app',
    methods:{
        say:function(val){
            alert(val)
        }
    }
})
4.2 事件修饰符
Vue为v-on提供了事件修饰符来处理DOM事件细节,如event.preventDefault()或event.stopPropagation(),通过.表示的指令调用修饰符:
- .stop:阻止事件冒泡
- .prevent:提交事件不再重载页面,如- <form v-on.submit.prevent="onSumbit"></form>
- .capture:事件捕获模式
- .self:只当事件在该元素本身(而不是子元素)触发时回调
- .once:事件只能点击一次
4.3 按键修饰符
Vue允许在v-on在监听键盘事件时添加按键修饰提示符:
<!--只有keyCode为13时调用submit()-->
<input v-on:keyup.13="submit">
keyCode值对应ASCII表,为了方便,Vue为常用的按键提供了别名:
- .esc
- .delete(删除+退格)
- .enter/- .space/- .tab
- .up/- .down/- .left/- .right
- .ctrl/- .alt/- .shift/- .meta
当然也可以进行按键的组合,使用.连接即可。
例子如下:
<div id="app">
    <input type="text" placeholder="请按下空格" v-on:keyup.space="spacePressed"><br>
    <input type="text" placeholder="请按下Ctrl+C" v-on:keyup.ctrl.67="ctrlCPressed">
    <!-- <input type="text" placeholder="请按下Ctrl+C" @keyup.ctrl.67="ctrlCPressed"> -->
    <p id="info"></p>
</div>
var vm = new Vue({
    el: '#app',
    methods:{
        spacePressed:function(){
            document.getElementById("info").innerHTML = "您按下了空格";
        },
        ctrlCPressed:function(){
            document.getElementById("info").innerHTML = "您按下了Ctrl+C";
        }
    }
})
Vue学习笔记(三)的更多相关文章
- vue学习笔记(三)class和style绑定
		前言 通过上一章的学习vue学习笔记(二)vue的生命周期和钩子函数,我们已经更近一步的知道了关于vue的一些知识,本篇博客将进一步探讨vue其它方面的内容,vue中关于class和style绑定,关 ... 
- Vue学习笔记三:v-bind,v-on的使用
		目录 v-bind:绑定属性值,内容相当于js,缩写: v-on:绑定方法,缩写@ 总结 v-bind:绑定属性值,内容相当于js,缩写: 我添加了一个input标签,如下 <input typ ... 
- VUE 学习笔记 三 模板语法
		1.插值 a.文本 数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值 <span>Message: {{ msg }}</span> v-once ... 
- vue学习笔记(三):vue-cli脚手架搭建
		一:安装vue-cli脚手架: 1:为了确保你的node版本在4.*以上,输入 node -v 查看本机node版本,低于4请更新. 2:输入: npm install -g vue-cli ... 
- vue学习笔记三:常见的表单绑定
		<template> <div id="app"> <input type="checkbox" id="checked ... 
- vue学习笔记(四)事件处理器
		前言 在上一章vue学习笔记(三)class和style绑定的内容中,我们学习了如何在vue中绑定class和style,介绍了常用的绑定方法,class的数组绑定和对象绑定以及style的数组绑定和 ... 
- Vue学习笔记-Vue.js-2.X 学习(三)===>组件化高级
		(四) 组件化高级 1.插槽(slot)的基本使用 A:基本使用: <slot></slot> B:默认置:<slot><h1>中间可以放默认值< ... 
- vue学习笔记(八)组件校验&通信
		前言 在上一章博客的内容中vue学习笔记(七)组件我们初步的认识了组件,并学会了如何定义局部组件和全局组件,上一篇内容仅仅只是对组件一个简单的入门,并没有深入的了解组件当中的其它机制,本篇博客将会带大 ... 
- vue学习笔记(九)vue-cli中的组件通信
		前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ... 
- vue学习笔记(十)路由
		前言 在上一篇博客vue学习笔记(九)vue-cli中的组件通信内容中,我们学习组件通信的相关内容和进行了一些组件通信的小练习,相信大家已经掌握了vue-cli中的组件通信,而本篇博客将会带你更上一层 ... 
随机推荐
- Scrapy项目_苏宁图书信息
			苏宁图书(https://book.suning.com/) 目标: 1.图书一级分类 2.图书二级分类 3.图书三级分类 4.图书名字 5.图书作者 6.图书价格 7.通过Scrapy获取以上数据 ... 
- 翻译:《实用的Python编程》03_00_Overview
			目录 | 上一节 (2 处理数据) | 下一节 (4 类和对象) 3. 程序组织 到目前为止,我们已经学习了一些 Python 基础知识并编写了一些简短的脚本.但是,当开始编写更大的程序时,我们会想要 ... 
- Google单元测试框架gtest--值参数测试
			测试一个方法,需要较多个参数进行测试,比如最大值.最小值.异常值和正常值.这中间会有较多重复代码工作,而值参数测试就是避免这种重复性工作,并且不会损失测试的便利性和准确性. 如果测试一个函数,需要些各 ... 
- 死磕Spring之IoC篇 - Bean 的创建过程
			该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ... 
- python学习之常用数据结构
			前言:数据结构不管在哪门编程语言之中都是非常重要的,因为学校的课程学习到了python,所以今天来聊聊关于python的数据结构使用. 一.列表 list 1.列表基本介绍 列表中的每个元素都可变的, ... 
- pytorch(17)学习率调整
			学习率调整 class _LRScheduler 主要属性 optimizer:关联的优化器 last_epoch:记录epoch数 bash_lrs:记录初始学习率 class _LRSchedul ... 
- python工业互联网应用实战7—业务层
			本章我们演示代码是如何"进化"的,实战的企业日常开发过程中,系统功能总伴随着业务的不断增加,早期简单的代码慢慢的越来越复杂,敏捷编程中的"禅"--简单设计.快速 ... 
- Java 基础加强 01
			基础加强·网络编程 和 GUI 网络编程概述 * A:计算机网络 * 是指将地理位置不同的具有独立功能的多台计算机及外部设备,通过通信连接起来 在网路操作系统,网络管理软件和网络通信协议的管理下,实现 ... 
- Python命令开启http.server服务器
			如果想把命令E:\zpic作为提供下载的目录,那么在cmd里cd到该目录下,并执行命令:python -m SimpleHTTPServer 默认的端口号是8000, 服务器根目录就是运行python ... 
- 为什么要从 Linux 迁移到 BSD2
			OpenZFS on Linux,是项目的 Linux 部分,目前有 345 个活跃的贡献者,有超过 5600 个提交,而且几乎每天都有提交!一些世界上最大的 CDN 和数据存储服务在 FreeBSD ... 
