接着前面的内容: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学习笔记(六)的更多相关文章

  1. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  2. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  3. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  4. vue2.0学习笔记之路由(二)路由嵌套+动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. vue2.0学习笔记之路由(二)路由嵌套

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

  7. Go语言学习笔记六: 循环语句

    Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...

  8. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  9. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

  10. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

随机推荐

  1. [Flink] Flink的waterMark的通俗理解

    导读 Flink 为实时计算提供了三种时间,即事件时间(event time).摄入时间(ingestion time)和处理时间(processing time). 遇到的问题: 假设在一个5秒的T ...

  2. Windows下用Python你会几种copy文件的方法?

    1. [代码]1. os.system ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import os import temp ...

  3. 编译器移植到.NET Core失败记录和对.NET未来感想

    .NET Core是微软力推的新平台,影响力好像还越来越大.为了对这一行业趋势有所准备,最近把自己搞的编程语言的编译器从.NET移植.NET Core,以实现跨平台在Linux上运行,然而失败了. 原 ...

  4. vscode下搭建typescript时提示"无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称"错误的解决方法

    根据网上的教程,安装了node.js后,再安装了typescript,,,这时候编译生成或者在vscode的终端里调用npm或者tsc --version时,总是提示 npm : 无法将"n ...

  5. 【强烈推荐】适合Flutter初学者的完整项目

    简介 Flutter Fly是什么?Flutter Fly是一款开源的Flutter 项目,非常适合初学者进行学习.App内集成了160+Flutter基础控件的详细介绍及用法,内容来源于:http: ...

  6. iOS 图片加载速度优化

    FastImageCache 是 Path 团队开发的一个开源库,用于提升图片的加载和渲染速度,让基于图片的列表滑动起来更顺畅,来看看它是怎么做的. 一.优化点 iOS 从磁盘加载一张图片,使用 UI ...

  7. 关于获取tableView中cell数据的处理

    前言           最近在做一个项目的时候遇到了这么一个问题,就是tableview作为一个表单,每一行cell都需要填充一个数据填充完成后再返回到table页面,最后进行总的提交.   解决 ...

  8. 一文教会你如何在 Spring 中进行集成测试,太赞了

    不得不说,测试真的是太重要了!但并不是所有的开发者都这样认为,这种感觉在我回到洛阳后尤其强烈.竟然有团队成员不经测试就把代码提交到代码库,并且是会报错的那种,我天呐,遇到这种队友我也是醉了. 我之前是 ...

  9. PTA数据结构与算法题目集(中文) 7-29

    PTA数据结构与算法题目集(中文)  7-29 7-29 修理牧场 (25 分)   农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条 ...

  10. Shell:Day07.笔记

    函数:1.函数介绍function 为了避免代码重复使用,我们一般通过函数编写代码块,而这一个代码块用来实现某种功能. 且,这个功能在后面的代码中,会重复调用:  def 2.函数的语法格式 函数的写 ...