Vue.2.0.5实现Class 与 Style 绑定的实例


Posted in Javascript onJune 20, 2017

Class 与 Style 绑定

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

绑定 HTML Class

对象语法

我们可以传给 v-bind:class 一个对象,以动态地切换 class 。

<div v-bind:class="{ active: isActive }"></div>

上面的语法表示 classactive 的更新将取决于数据属性 isActive 是否为真值 。

我们也可以在对象中传入更多属性用来动态切换多个 class 。此外, v-bind:class 指令可以与普通的 class 属性共存。如下模板:

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

如下 data:

data: {
 isActive: true,
 hasError: false
}

渲染为:

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

当 isActive 或者 hasError 变化时,class 列表将相应地更新。例如,如果 hasError的值为 true , class列表将变为 "static active text-danger"。

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

<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',
  }
 }
}

数组语法

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

<div v-bind:class="[activeClass, errorClass]">
data: {
 activeClass: 'active',
 errorClass: 'text-danger'
}

渲染为:

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

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

<div v-bind:class="[isActive ? activeClass : '', errorClass]">

此例始终添加 errorClass ,但是只有在 isActive 是 true 时添加 activeClass 。

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

<div v-bind:class="[{ active: isActive }, errorClass]">

With Components

This section assumes knowledge ofVue Components. Feel free to skip it and come back later.

When you use the class attribute on a custom component, those classes will be added to the component's root element. Existing classes on this element will not be overwritten.

For example, if you declare this component:

Vue.component('my-component', {
 template: '<p class="foo bar">Hi</p>'
})

Then add some classes when using it:

<my-component class="baz boo"></my-component>

The rendered HTML will be:

<p class="foo bar baz boo">Hi</p>

The same is true for class bindings:

<my-component v-bind:class="{ active: isActive }"></my-component>

When isActive is truthy, the rendered HTML will be:

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

绑定内联样式

对象语法

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]">

自动添加前缀

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

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

Javascript 相关文章推荐
使用 Node.js 做 Function Test实现方法
Oct 25 Javascript
jquery实现可拖拽弹出层特效
Jan 04 Javascript
封装了jQuery的Ajax请求全局配置
Feb 05 Javascript
JS实现的4种数字千位符格式化方法分享
Mar 02 Javascript
apply和call方法定义及apply和call方法的区别
Nov 15 Javascript
jQuery控制frames及frame页面JS的方法
Mar 08 Javascript
Bootstrap3下拉菜单的实现
Feb 22 Javascript
基于vue实现swipe分页组件实例
May 25 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 jQuery
最后说说Vue2 SSR 的 Cookies 问题
May 25 Javascript
vue弹窗组件的实现示例代码
Sep 10 Javascript
vue-router传递参数的几种方式实例详解
Nov 13 Javascript
JS中的三个循环小结
Jun 20 #Javascript
详解Vue 方法与事件处理器
Jun 20 #Javascript
Vue Ajax跨域请求实例详解
Jun 20 #Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
Jun 20 #Javascript
详解Angular的8个主要构造块
Jun 20 #Javascript
vue之数据交互实例代码
Jun 20 #Javascript
jquery加载单文件vue组件的方法
Jun 20 #jQuery
You might like
用PHP制作的意见反馈表源码
2007/03/11 PHP
PHP实现MVC开发得最简单的方法――模型
2007/04/10 PHP
php array_slice函数的使用以及参数详解
2008/08/30 PHP
php向js函数传参的几种方法
2014/08/10 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
python flask中静态文件的管理方法
2018/03/20 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
python 集合 并集、交集 Series list set 转换的实例
2018/05/29 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
聚网科技C++面试笔试题
2015/09/01 面试题
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
经典商业广告词
2014/03/13 职场文书
软件售后服务承诺书
2014/05/21 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python