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 表单输入框不支持focus及blur事件的解决方案
Nov 17 Vue.js
在vue中使用inheritAttrs实现组件的扩展性介绍
Dec 07 Vue.js
vue3.0实现插件封装
Dec 14 Vue.js
vue使用require.context实现动态注册路由
Dec 25 Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
vue 实现图片懒加载功能
Dec 31 Vue.js
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
详解Vue的列表渲染
Nov 20 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执行速度全攻略
2006/10/09 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
PHP比你想象的好得多
2014/11/27 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
PHP类的封装与继承详解
2015/09/29 PHP
yii添删改查实例
2015/11/16 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
javascript 动态生成私有变量访问器
2009/12/06 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
信访工作者先进事迹
2014/01/17 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
借条格式范本
2015/05/25 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android