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 相关文章推荐
自动生成文章摘要的代码[JavaScript 版本]
Mar 20 Javascript
Input 特殊事件onpopertychange和oninput
Jun 17 Javascript
显示js对象所有属性和方法的函数
Oct 16 Javascript
jQuery实现仿Google首页拖动效果的方法
May 04 Javascript
jQuery 3 中的新增功能汇总介绍
Jun 12 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
Vue.js实现价格计算器功能
Mar 30 Javascript
基于AngularJS的简单使用详解
Sep 10 Javascript
Vue实战之vue登录验证的实现代码
Oct 31 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
May 22 Javascript
Vuex,iView UI面包屑导航使用扩展详解
Nov 04 Javascript
使用Vue实现一个树组件的示例
Nov 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去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
Python标准库之collections包的使用教程
2017/04/27 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
空中乘务员岗位职责
2014/03/08 职场文书
物流专业自荐信
2014/05/23 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
飞越疯人院观后感
2015/06/09 职场文书
警示教育片观后感
2015/06/17 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
如何写好闭幕词
2019/04/02 职场文书