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 相关文章推荐
从数据结构的角度分析 for each in 比 for in 快的多
Jul 07 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
Oct 29 Javascript
框架页面高度自动刷新的Javascript脚本
Nov 01 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
AngularJS 应用身份认证的技巧总结
Nov 07 Javascript
JS检测window.open打开的窗口是否关闭
Jun 25 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
Oct 11 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
Vue项目安装插件并保存
Jan 28 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
Apr 04 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
Jul 21 Javascript
vue中实现点击变成全屏的多种方法
Sep 27 Javascript
在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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
JS 网站性能优化笔记
2011/05/24 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
浅析php原型模式
2014/11/25 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
python实现汽车管理系统
2018/11/30 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
python 画条形图(柱状图)实例
2020/04/24 Python
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
在校生证明
2015/06/17 职场文书
入党转正申请书范文
2019/05/20 职场文书