Vue.js每天必学之Class与样式绑定


Posted in Javascript onSeptember 05, 2016

数据绑定一个常见需求是操作元素的 class 列表和它的内联样式。因为它们都是 attribute,我们可以用 v-bind 处理它们:只需要计算出表达式最终的字符串。不过,字符串拼接麻烦又易错。因此,在 v-bind 用于 class 和 style 时,Vue.js 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。

绑定 HTML Class

尽管可以用 Mustache 标签绑定 class,比如 `{% raw %}class=”{{ className }}”{% endraw %}`,但是我们不推荐这种写法和 `v-bind:class` 混用。两者只能选其一!

对象语法

我们可以传给 v-bind:class 一个对象,以动态地切换 class。注意 v-bind:class 指令可以与普通的 class 特性共存:

<div class="static" v-bind:class="{ 'class-a': isA, 'class-b': isB }"></div>

data: {
 isA: true,
 isB: false
}

渲染为:

<div class="static class-a"></div>

当 isA 和 isB 变化时,class 列表将相应地更新。例如,如果 isB 变为 true,class 列表将变为 "static class-a class-b"。

你也可以直接绑定数据里的一个对象:

<div v-bind:class="classObject"></div>

data: {
 classObject: {
 'class-a': true,
 'class-b': false
 }
}

我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式。

数组语法

我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:

<div v-bind:class="[classA, classB]">

data: {
 classA: 'class-a',
 classB: 'class-b'
}

渲染为:

<div class="class-a class-b"></div>

如果你也想根据条件切换列表中的 class,可以用三元表达式:

<div v-bind:class="[classA, isB ? classB : '']">

此例始终添加 classA,但是只有在 isB 是 true 时添加 classB 。

不过,当有多个条件 class 时这样写有些繁琐。在 1.0.19+ 中,可以在数组语法中使用对象语法:

<div v-bind:class="[classA, { classB: isB, classC: isC }]">

绑定内联样式

对象语法

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="[styleObjectA, styleObjectB]">

自动添加前缀

当 v-bind:style 使用需要厂商前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀。

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE 下的只读 innerHTML
Aug 21 Javascript
通过百度地图获取公交线路的站点坐标的js代码
May 11 Javascript
javascript实现可改变滚动方向的无缝滚动实例
Jun 17 Javascript
动态读取JSON解析键值对的方法
Jun 03 Javascript
jQuery实现新消息在网页标题闪烁提示
Jun 23 Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 Javascript
Bootstrap媒体对象学习使用
Mar 07 Javascript
JS实现AES加密并与PHP互通的方法分析
Apr 19 Javascript
JS 组件系列之BootstrapTable的treegrid功能
Jun 16 Javascript
php 解压zip压缩包内容到指定目录的实例
Jan 23 Javascript
Vue实现左右菜单联动实现代码
Aug 12 Javascript
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 #Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
Sep 05 #Javascript
Bootstrap使用基础教程详解
Sep 05 #Javascript
chrome浏览器如何断点调试异步加载的JS
Sep 05 #Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
Sep 05 #Javascript
Vue.js每天必学之表单控件绑定
Sep 05 #Javascript
深入分析node.js的异步API和其局限性
Sep 05 #Javascript
You might like
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
Python中return函数返回值实例用法
2020/11/19 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
荷兰电脑专场:Paradigit
2018/05/05 全球购物
俄罗斯商务邀请函
2014/01/26 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
合伙协议书
2014/04/23 职场文书
销售员态度差检讨书
2014/10/26 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
MySQL池化框架学习接池自定义
2022/07/23 MySQL