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 相关文章推荐
js实现DIV的一些简单控制
Jun 04 Javascript
javascript 框架小结 个人工作经验
Jun 13 Javascript
js采用map取到id集合组并且实现点击一行选中一行
Dec 16 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
Oct 21 Javascript
纯原生js实现table表格的增删
Jan 05 Javascript
webpack2.0配置postcss-loader的方法
Aug 17 Javascript
vue组件之Alert的实现代码
Oct 17 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 Javascript
JavaScript多线程运行库Nexus.js详解
Dec 22 Javascript
vue实现打印功能的两种方法
Sep 07 Javascript
Vue中实现权限控制的方法示例
Jun 07 Javascript
Angular6项目打包优化的实现方法
Dec 15 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
php google或baidu分页代码
2009/11/26 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
拖拉表格的JS函数
2008/11/20 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
培训讲师邀请函
2014/01/10 职场文书
2015年清明节活动总结
2015/02/09 职场文书
交通安全主题班会
2015/08/12 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
java Nio使用NioSocket客户端与服务端交互实现方式
2021/06/15 Java/Android
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery
PyTorch device与cuda.device用法
2022/04/03 Python
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript