vue2.x学习笔记(六)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12571171.html。
class与style绑定
操作元素的class列表和内联样式,是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用【v-bind】指令去处理它们,只需要通过表达式计算出字符串的结果即可。不过,字符串拼接麻烦且易错。因此,在将【v-bind】指令用于class和style的时候,vue做了专门的增强。表达式结果的类型,除了字符串之外,还可以是对象或数组。
绑定class的对象语法
我们可以传一个对象给【v-bind:class】指令,以达到动态切换class的目的。
<div v-bind:class="{ active: isActive }"></div>
上面的语法,表示active这个class的存在与否,取决于数据属性isActive的truthiness。
那么,你也可以在对象中传入更多的属性来动态切换多个class。除此之外,【v-bind:class】指令也可以与普通的class属性共存。
<div
class="static"
v-bind:class="{ active: isActive, 'text-danger': hasError }"></div>
data: {
isActive: true,
hasError: false
}
以上的结果将会被渲染为:
<div class="static active"></div>
普通的class属性会和【v-bind:class】指令的结果合并,而当isActive或者hasError变化的时候,class列表也将被相应地更新。
此外,绑定的数据对象也可以不必内联定义在模板内,提出来也是支持的。
<div v-bind:class="classObject"></div>
data: {
classObject: {
active: true,
'text-danger': false
}
}
渲染出来的结果和上面是一样的。更多的,我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式。
<div v-bind:class="classObject"></div>
data: {
isActive: true,
error: null
},
computed: {
classObject: function () {
return {
active: this.isActive && !this.error,
'text-danger': this.error && this.error.type === 'fatal'
}
}
}
这样,classObject会自动随着isActive和error的变化而变化,方便了我们实时切换样式。
绑定class的数组语法
我们可以把一个数组传给【v-bind:class】,以应用一个class列表。
<div v-bind:class="[activeClass, errorClass]"></div>
data: {
activeClass: 'active',
errorClass: 'text-danger'
}
以上的结果将被渲染为:
<div class="active text-danger"></div>
在这里可以看得出,数组的语法使用的是键绑定的做法,传一个键的数组,vue会自动将值映射到class中。
另外,绑定class的数组语法也支持条件控制,可以使用三元表达式。
<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
不过,这样的语法可读性较低,且当有多个条件class的时候会显得有点繁琐,因此vue还支持在数组的语法中使用对象的语法。
<div v-bind:class="[{ active: isActive }, errorClass]"></div>
这样写和上面的结果是一样的,但是可读性就稍微提高了一丢丢。
绑定class到组件上
当在一个自定义的组件上使用class属性的时候,这些class将会被添加到该组件的根元素上面,这个元素上已经存在的class不会被覆盖,而是会合并。
声明一个组件:
Vue.component('my-component', {
template: '<p class="foo bar">Hi</p>'
})
然后再使用这个组件的时候给这个组件实例添加一些class:
<my-component class="baz boo"></my-component>
那么这个组件最终会在html中被渲染为:
<p class="foo bar baz boo">Hi</p>
这里要注意的是,只有根元素会继承这些个class,根元素下的子孙元素是不会继承这些个class的。
绑定内联样式的对象语法
【v-bind:style】的对象语法十分直观,因为看起来就非常像css,但它其实是一个javascript对象。css属性名可以用驼峰式(camelCase)或者短横线分隔(kebab-case)来命名。
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
activeColor: 'red',
fontSize: 30
}
内联定义在模板中显然可读性较差,因此直接绑定到一个样式对象通常是更好的做法,会使模板变得更清晰。
<div v-bind:style="styleObject"></div>
data: {
styleObject: {
color: 'red',
fontSize: '13px'
}
}
同样的,对象语法常常结合返回对象的计算属性使用。
绑定内联样式的数组语法
【v-bind:style】的数组语法可以将多个样式对象应用到同一个元素上。
<div v-bind:style="[baseStyles, overridingStyles]"></div>
绑定的就是键值对对象的数组。
绑定内联样式自动添加前缀
我们知道,一些css属性因为浏览器的兼容性问题,是需要添加浏览器引擎前缀的,比如transform,当我们使用【v-bind:style】指令绑定内联样式的时候,vue也会自动检测并添加相应的前缀。这是vue十分人性化的一点,因为浏览器的兼容性前缀常常是一个令人头疼的问题,重复且冗余。
绑定内联样式的多重值
从2.3.0开始,开发者可以为style绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值。
<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>
这样写的话,vue只会渲染出数组中最后一个被浏览器支持的值,比如在上面的这个例子中,如果浏览器支持不带浏览器前缀的flexbox,那么就只会渲染出display:flex。
"我还是很喜欢你,像春风守护着晨曦,不曾远去。"
vue2.x学习笔记(六)的更多相关文章
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记六:接口
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- vue2.0学习笔记之路由(二)路由嵌套+动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue2.0学习笔记之路由(二)路由嵌套
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
- Go语言学习笔记六: 循环语句
Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...
- 【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)
目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...
随机推荐
- Building Applications with Force.com and VisualForce (DEV401) (二二):Visualforce Componets (Tags) Library Part II
Dev401-023:Visualforce Pages: Visualforce Componets (Tags) Library Part II Apex:pageBlockTable1.A ...
- Pandas和Numpy的一些金融相关的操作(一)
Pandas和Numpy的一些金融相关的操作 给定一个净值序列,求出最大回撤 # arr是一个净值的np.ndarray i = np.argmax( (np.maximum.acumulate(ar ...
- 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)
目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...
- 双剑合璧的开源项目Kitty-Cloud
项目地址 https://github.com/yinjihuan/kitty-cloud 背景 做这个项目主要是想将个人的一些经验通过开源的形式进行输出,不一定能帮到所有人,有感兴趣的朋友可以关注学 ...
- 《Java多线程编程实战指南(核心篇)》阅读笔记
<Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...
- Docker搭建MySQL主从复制
Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...
- ios shell打包脚本 xcodebuild
#! /bin/bash project_path=$() project_config=Release output_path=~/Desktop build_scheme=YKTicketsApp ...
- IOS 获取系统时间戳
IOS 获取系统时间戳常用方法 通用方法有如下三种: NSLog(); NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:]; NSTimeInte ...
- Ubuntu系统在Anaconda中安装Python3.6的虚拟环境
原因:Anaconda的python版本是3.7的,TensorFlow尚不支持此版本,于是我们创建一个Python的虚拟环境以支持TensorFlow 创建tf环境 conda create --n ...
- ATM购物车+三层结构项目设计
ATM购物车项目 模拟实现一个ATM + 购物商城程序. 该程序实现普通用户的登录注册.提现充值还款等功能,并且支持到网上商城购物的功能. 账户余额足够支付商品价格时,扣款支付:余额不足时,无法支付, ...