接着前面的内容: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。

"我还是很喜欢你,像春风守护着晨曦,不曾远去。"

最新文章

  1. [转载]python property
  2. 抄书 Copying Books UVa 714
  3. [家里蹲大学数学杂志]第269期韩青编《A Basic Course in Partial Differential Equations》 前五章习题解答
  4. 转: PE rva to raw 虚拟偏移地址和文件物理偏移地址
  5. 固定定位fixed(IE6)
  6. Bluetooth LE(低功耗蓝牙) - 第五部分
  7. 手机端input,select屏蔽浏览器默认事件
  8. Lua 字符串函数小结
  9. node.js入门(二) 第一个程序 Hello World
  10. Html.raw(转帖)
  11. (转)Tomcat 配置成https协议
  12. Linux系列教程(十三)——Linux软件包管理之源码包、脚本安装包
  13. kali 2.0中msf连接postgres数据库
  14. Unix 文件系统读写时权限校验
  15. 前端构建工具gulp之基本介绍
  16. 重置sqlserver自增长列的种子
  17. Linux on window初体验
  18. 项目Alpha冲刺(团队5/10)
  19. MariaDB第三章(select)
  20. swift 计算100000以内的 回文数

热门文章

  1. springboot使用swagger2创建文档
  2. 多线程设计模式——Read-Write Lock模式和Future模式分析
  3. Oracle 10g客户端的安装和配置
  4. Api接口幂等设计
  5. XCode8 安装模拟器
  6. Innodb的三大关健特性
  7. Aho-Corasick automaton
  8. B 外地比赛
  9. CSAPP实验——DataLab
  10. 部署mysql主从同步