vue绑定class的三种方法


Posted in Vue.js onDecember 24, 2020

一、对象语法

1、给v-bind:class 设置一个对象,可以动态地切换class,例如:

<div id="app">
  <div :class="{'active':isActive}"></div>
</div>
<script>
var app = new Vue({
  el:'#app',
  data:{
    isActive:true
  }
})
</script>

最终渲染结果:

<div class="active"></div>

2、对象中也可以传入多个属性,来动态切换class。另外,:class可以与普通class共存,例如:

<div id="app">
  <div class="static" :class="{'active':isActive,'error':isError}"></div>
</div>
<script>
var app = new Vue({
  el:'#app',
  data:{
    isActive:true,
    isError:false
  }
})
</script>

最终渲染结果(当数据isActive或isError变化时,对应的class也会更新):

<div class="static active"></div>

3、当:class的表达式过长或逻辑复杂时,还可以绑定一个计算属性,这是一种友好和常见的用法,一般当条件多于两个时,都可以使用data或者computed,例如:

<div id="app">
  <div :class="classes"></div>
</div>
<script>
var app = new Vue({
  el:'#app',
  data:{
    isActive:true,
    isError:null
  },
  computed:{
    classes(){
      return {
        active:this.isActive && !this.error,
        'text-fail':this.error && this.error.type ==='fail'
      }
    }
  }
})
</script>

除了计算属性,也可以直接绑定一个Object类型的数据,或者使用类似计算属性的methods.

二、数组语法

1、当需要应用多个class时,可以使用数组语法,给:class绑定一个数组,应用一个class列表:

<div id="app">
  <div :class="[atvieCls,errorCls]"></div>
</div>
<script>
var app = new Vue({
  el:'#app',
  data:{
    atvieCls:'active',
    errorCls:'error'
  }
})
</script>

渲染后的结果为:

<div class="active error"></div>

2、使用三元表达式,根据条件切换class(当数据isActive为真时,样式active才会被应用):

<div id="app">
  <div :class="[isActive ? activeCls : '',errorCls]"></div>
</div>
<script>
var app = new Vue({
  el:'#app',
  data:{
    isActive:true,
    atvieCls:'active',
    errorCls:'error'
  }
})
</script>

渲染后的结果为:

<div class="active error"></div>

3、class有多个条件时,这样写较为烦琐,可以在数组语法中使用对象语法:

<div id="app">
  <div :class="[{'active':isActive},errorCls]"></div>
</div>
<script>
var app = new Vue({
  el:'#app',
  data:{
    isActive:true,
    errorCls:'error'
  }
})
</script>

4、与对象语法一样,也可以使用data、computed、method三种方法,以计算属性为例:

<div id="app">
  <button :class="classes"></button>
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      size: 'large',
      disabled: true
    },
    computed: {
      classes: function () {
        return [
          'btn',
          {
            ['btn-'+this.size]: this.size!=='',
            ['btn-disabled']: this.disabled,
          }
        ]
      }
    }
  })
</script>

渲染后的结果为:

<div class="btn btn-large btn-disabled"></div>

以上,样式btn会始终应用,当数据size不为空时,会应用样式前缀btn-,后加size的值;当数据disabled为真时,会应用样式btn-disabled.

使用计算属性给元素动态设置类名,在业务中经常用到,尤其是在写复用的组件时,所以在开发过程中,如果表达式较长或逻辑复杂,应该尽可能优先使用计算属性。

三、在组件上使用

 如果直接在自定义组件上使用class或:class,样式规则会直接应用到这个组件的根元素上,例如声明一个简单的组件:

<script>
  Vue.component('my-component', {
    template: '<p class="article">一些文本</p>'
  })
</script>

然后在调用该组件时,使用对象语法或数组语法给组件绑定class,以对象语法为例:

<div id="app">
  <my-component :class="'active':isActive"></my-component>
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      isActive: true
    }
  })
</script>

最终组件渲染后的结果为:

<p class="article active">一些文本</p>

这种方法仅适用于自定义组件的最外层是一个根元素,否则会无效,当不满足这种条件或需要给具体的子元素设置类名时,应当使用组件的 props 来传递。

以上就是vue绑定class的三种方法的详细内容,更多关于vue绑定class的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue单元格多列合并的实现
Nov 26 Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 Vue.js
Vue实现省市区三级联动
Dec 27 Vue.js
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
详解Vue3使用axios的配置教程
Apr 29 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
全面解析Vue中的$nextTick
Dec 24 #Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 #Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 #Vue.js
Vue3 实现双盒子定位Overlay的示例
Dec 22 #Vue.js
详解Vue的异步更新实现原理
Dec 22 #Vue.js
Vue组件简易模拟实现购物车
Dec 21 #Vue.js
vue实现购物车的小练习
Dec 21 #Vue.js
You might like
php中常用的预定义变量小结
2012/05/09 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python易忽视知识点小结
2015/05/25 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
深入理解Django的中间件middleware
2018/03/14 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
高中军训广播稿
2014/01/14 职场文书
大学生毕业鉴定
2014/01/31 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
中秋晚会致辞
2015/07/31 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python