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 批 ...
随机推荐
- 带有路径压缩和rank优化的并查集实现
public class unionfind2 implements UF { int[] parent; int[] rank; public unionfind2(int n) { parent= ...
- sql数据库(更新)
安装postgreSQL,遇到的bug:不要选择默认路径,安装到program files,否则连接数据库的时候会出现问题 如图显示数据库连接成功. 1.创建数据库——执行创建数据库的SQL 语句 C ...
- Leetcode——回溯法常考算法整理
Leetcode--回溯法常考算法整理 Preface Leetcode--回溯法常考算法整理 Definition Why & When to Use Backtrakcing How to ...
- 为何Keras中的CNN是有问题的,如何修复它们?
在训练了 50 个 epoch 之后,本文作者惊讶地发现模型什么都没学到,于是开始深挖背后的问题,并最终从恺明大神论文中得到的知识解决了问题. 上个星期我做了一些实验,用了在 CIFAR10 数据集上 ...
- Colab笔记本能用英伟达Tesla T4了,谷歌的羊毛薅到酸爽
谷歌出品的Colab笔记本,机器学习界薅羊毛神器,如今又有了新福利: 连英伟达最新一代机器学习GPU:Tesla T4都能免费蹭,穷苦羊毛党也顿时高端了起来. 英伟达的Tesla T4,是去年秋天才发 ...
- 蓝桥杯 K好数(Java)
越来越觉得自己菜,一道简单的动态规划写不出来,题解也是看了很多份才看懂了,所以尽量以图表的方式写了题解,希望我的题解能帮到其他人吧.(;´Д`) 首先是题目: 输入描述: 输入包含两个正整数,K和L. ...
- WiX 简介
最近研究了一下WIX打包,简单总结一下,方便自己以后查阅,也希望能给需要的人一些提示和帮助. WiX 简介 Windows Installer XML (WiX ) 平台是一组工具与规范,使您能够创建 ...
- springboot系列(三)配置文件详解
目录 properties 文件 1.语法 2.优先级 3.自定义数据配置 4.获取自定义数据配置 1.通过prefix获取 yml文件 1.语法 2.优先级 3.自定义数据配置. 4.获取自定义数据 ...
- Pytest系列(7) - skip、skipif跳过用例
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest.mark.sk ...
- Java中的get()方法和set()方法
在Java中,为了数据的安全,换句话说就是为了隐藏你的代码的一些实现细节,我们会用private来修饰属性,使用private修饰的属性就不能被其他类直接访问了,想要访问就需要通过set.get方法: ...