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 1.7.2中getAll方法的疑惑分析
May 23 Javascript
web css实现整站样式互相切换
Oct 29 Javascript
javascript判断chrome浏览器的方法
Mar 26 Javascript
JS实现左右拖动改变内容显示区域大小的方法
Oct 13 Javascript
JavaScript动态设置div的样式的方法
Dec 26 Javascript
JS传值出现中文参数乱码的解决方法
Jun 30 Javascript
jquery实现全选、不选、反选的两种方法
Sep 06 Javascript
在JavaScript中调用Java类和接口的方法
Sep 07 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
Oct 21 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
Jan 05 Javascript
vue awesome swiper异步加载数据出现的bug问题
Jul 03 Javascript
vue生成文件本地打开查看效果的实例
Sep 06 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使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
php Session无效分析资料整理
2016/11/29 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
JS根据生日算年龄的方法
2015/05/05 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
世界上最大的二手相机店:KEN
2017/05/17 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
几个SQL的面试题
2014/03/08 面试题
网站编辑求职信
2013/10/17 职场文书
中介业务员岗位职责
2014/04/09 职场文书
生产车间标语
2014/06/11 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
三好生演讲稿
2014/09/12 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
办理收楼委托书范本
2014/10/09 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
Python的这些库,你知道多少?
2021/06/09 Python
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏