Vue 样式绑定的实现方法


Posted in Javascript onJanuary 15, 2019

学习 Vue 的时候觉得样式绑定很简单,但是使用的时候总是容易搞晕自己。因为 :class 和 :style 里的数组语法和对象语法和 data 里绑定的值是不太一样的。这篇文章就简单对 Vue 绑定做个总结。

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

  • Class绑定
  • Style绑定

绑定Class

对象语法

data 里的属性是负责 toggle 是否要这个 class,也就是一般定义 Boolean 类型的值。

<div :class="{ active: isActive, 'text-danger': hasError }"></div>

这里用 isActive 和 hasError 定义是否需要 active 和 text-danger 类。

data: {
 isActive: true,
 hasError: false
}

渲染为

<div class="active"></div>

数组语法

data 里负责定义 CSS 类名。

<div :class="[activeClass, errorClass]"></div>

这里定义了 activeClass 和 errorClass 的 CSS 类名是 active 和 text-danger。

data: {
 activeClass: 'active',
 errorClass: 'text-danger'
}

渲染为

<div class="active text-danger"></div>

混合写法

可以用混合的形式来绑定 class,即数组语法里写对象语法。所以 data 里的数据主要用于:

  1. 是否需要某个 class
  2. 定义 "class" 里面的类名
<div :class="[{ active: isActive }, errorClass]"></div>

这里定义了 errorClass 的 CSS 类名为 text-danger,并用 isActive 定义是否需要 active 类。

data: {
 errorClass: 'text-danger',
 isActive: true
}

渲染为

<div class="active text-danger"></div>

绑定Style

对象语法

data 里的属性是定义 style 里的值。与 class 不一样,class 是定义是否要这个 class的。

<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

这里定义了 style 里的 color 和 font-size 的值。

data: {
 activeColor: 'red',
 fontSize: 30
}

渲染为

<div style="color: red; font-size: 30px"></div>

数组语法

可以绑定多个样式对象到 style 上

<div :style="[baseStyles, overridingStyles]"></div>

这里在 data 里用 styleObject 定义了 color 和 font-size,再用 overridingStyles 定义了 background 和 margin。然后在组件里用数组进行混合绑定。

data: {
 styleObject: {
  color: 'red',
  fontSize: '13px'
 },
 overridingStyles: {
  background: 'green',
  margin: '13px'
 }
}

渲染为

<div style="color: red; font-size: 13px; background: green; margin: 13px;"></div>

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

Javascript 相关文章推荐
prototype 的说明 js类
Sep 07 Javascript
AJAX架构之Dojo篇
Apr 10 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
Sep 15 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
AngularJS模块详解及示例代码
Aug 17 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
Sep 08 Javascript
详解vue-cli3开发Chrome插件实践
May 29 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
Apr 26 Javascript
vue3.0实现插件封装
Dec 14 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
在vue使用clipboard.js进行一键复制文本的实现示例
Jan 15 #Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
Jan 15 #Javascript
mock.js实现模拟生成假数据功能示例
Jan 15 #Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 #Javascript
JS高阶函数原理与用法实例分析
Jan 15 #Javascript
JS立即执行函数功能与用法分析
Jan 15 #Javascript
vue-cli 目录结构详细讲解总结
Jan 15 #Javascript
You might like
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
php实现简单加入购物车功能
2017/03/07 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
python之yield表达式学习
2014/09/02 Python
单链表反转python实现代码示例
2018/02/08 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
广告学专业自荐信范文
2014/02/24 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
复兴之路观后感
2015/06/02 职场文书
暑假打工感想
2015/08/07 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL