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 相关文章推荐
IE中直接运行显示当前网页中的图片 推荐
Aug 31 Javascript
jquery 最简单的属性菜单
Oct 08 Javascript
基于jquery打造的百分比动态色彩条插件
Sep 19 Javascript
javascript验证上传文件的类型限制必须为某些格式
Nov 14 Javascript
学习JavaScript设计模式(链式调用)
Nov 26 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
js实现页面跳转的几种方法小结
May 16 Javascript
js实现千分符和保留几位小数的简单实例
Aug 01 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
May 02 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
详解小程序退出页面时清除定时器
Apr 28 Javascript
js实现整体缩放页面适配移动端
Mar 31 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
实现PHP搜索加分页
2016/10/12 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
javascript时间函数大全
2014/06/30 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
在Python下尝试多线程编程
2015/04/28 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
对python中dict和json的区别详解
2018/12/18 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
《自然之道》教学反思
2014/02/11 职场文书
2014村务公开实施方案
2014/02/25 职场文书
个人银行贷款担保书
2014/04/01 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
社会实践评语
2014/04/28 职场文书
关于学习的演讲稿
2014/05/10 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
经理岗位职责
2015/02/02 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
python基础之文件操作
2021/10/24 Python
Python面向对象编程之类的概念
2021/11/01 Python