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 相关文章推荐
Extjs Ajax 乱码问题解决方案
Apr 15 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
Apr 05 Javascript
基于jQuery的图片左右无缝滚动插件
May 23 Javascript
用jquery实现的一个超级简单的下拉菜单
May 18 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
Aug 18 Javascript
jQuery命名空间与闭包用法示例
Jan 12 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
Feb 27 Javascript
微信小程序之绑定点击事件实例详解
Jul 07 Javascript
Angularjs Promise实例详解
Mar 15 Javascript
Vue2实时监听表单变化的示例讲解
Aug 30 Javascript
js实现延迟加载的几种方法详解
Jan 19 Javascript
JS实现给数组对象排序的方法分析
Jun 24 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
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
几个高效,简洁的字符处理函数
2007/04/12 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
js实现秒表计时器
2019/12/16 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
Python判断文本中消息重复次数的方法
2016/04/27 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
python学习入门细节知识点
2018/03/29 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
亲子拓展活动方案
2014/02/20 职场文书
服务行业口号
2014/06/11 职场文书
停车位租赁协议书
2014/09/24 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
详解Vue的options
2021/05/15 Vue.js
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA
nginx 配置缓存
2022/05/11 Servers
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技