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 相关文章推荐
JQuery for与each性能比较分析
May 14 Javascript
jquery重复提交请求的原因浅析
May 23 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 Javascript
解析JavaScript中的字符串类型与字符编码支持
Jun 24 Javascript
AngularJS国际化详解及示例代码
Aug 18 Javascript
jQuery UI制作选项卡(tabs)
Dec 13 Javascript
详解vue的数据binding绑定原理
Apr 12 Javascript
AngularJS表单验证功能分析
May 26 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
用Cordova打包Vue项目的方法步骤
Feb 02 Javascript
封装一下vue中的axios示例代码详解
Feb 16 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
Sep 11 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文件下载类
2006/12/06 PHP
用PHP实现Ftp用户的在线管理的代码
2007/03/06 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
python聊天程序实例代码分享
2013/11/18 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
python软件都是免费的吗
2020/06/18 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
.NET常见笔试题集
2012/12/01 面试题
应届毕业生应聘自荐信
2013/12/07 职场文书
职工运动会邀请函
2014/01/19 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
计划生育个人总结
2015/03/02 职场文书
面试通知邮件
2015/04/20 职场文书
创业计划书之宠物店
2019/09/19 职场文书
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
Python内置数据类型中的集合详解
2022/03/18 Python
一文简单了解MySQL前缀索引
2022/04/03 MySQL