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 相关文章推荐
自己做的模拟模态对话框实现代码
May 23 Javascript
解决js中window.open弹出的是上次的缓存页面问题
Dec 29 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
Jul 04 Javascript
浅谈js的setInterval事件
Dec 05 Javascript
javascript函数特点实例分析
May 14 Javascript
JQuery ztree 异步加载实例讲解
Feb 25 Javascript
jQuery.deferred对象使用详解
Mar 18 Javascript
jquery滚动条插件(可以自定义)
Dec 11 Javascript
JavaScript中双向数据绑定详解
May 03 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
详解vue中axios的使用与封装
Mar 20 Javascript
Angular实现svg和png图片下载实现
May 05 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之PHP语法学习笔记1
2006/12/17 PHP
PHP中函数内引用全局变量的方法
2008/10/20 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
python中的闭包用法实例详解
2015/05/05 Python
Python简明入门教程
2015/08/04 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
使用python实现学生信息管理系统
2021/02/25 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
酒吧员工的岗位职责
2013/11/26 职场文书
竞选部长演讲稿
2014/04/26 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
国际贸易实训报告
2014/11/05 职场文书
万里长城导游词
2015/01/30 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS