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 相关文章推荐
jquery下onpropertychange事件的绑定方法
Aug 01 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
Oct 06 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
jquery如何改变html标签的样式(两种实现方法)
Jan 16 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 Javascript
几句话带你理解JS中的this、闭包、原型链
Sep 26 Javascript
Vue.JS入门教程之列表渲染
Dec 01 Javascript
JS中的Replace()传入函数时的用法详解
Sep 11 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
Sep 11 Javascript
微信小程序HTTP请求从0到1封装
Sep 09 Javascript
vue iview实现动态新增和删除
Jun 17 Javascript
ES11屡试不爽的新特性,你用上了几个
Oct 21 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
PHP图片上传类带图片显示
2006/11/25 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
浅谈php冒泡排序
2014/12/30 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
jQuery实现文本框输入同步的方法
2015/06/20 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
Seajs源码详解分析
2019/04/02 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
Python和php通信乱码问题解决方法
2014/04/15 Python
python实现在windows下操作word的方法
2015/04/28 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
python怎么对数字进行过滤
2020/07/05 Python
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
人大调研汇报材料
2014/08/14 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js