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 相关文章推荐
深入了解Vue3模板编译原理
Nov 19 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
Vue Element UI自定义描述列表组件
May 18 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
vue生命周期钩子函数以及触发时机
Apr 26 Vue.js
Vue router配置与使用分析讲解
Dec 24 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中通过curl检测页面是否被百度收录
2013/09/27 PHP
php构造函数的继承方法
2015/02/09 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
js读取cookie方法总结
2014/10/31 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
python类定义的讲解
2013/11/01 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
python中pyqtgraph知识点总结
2021/01/26 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
教学评估实施方案
2014/03/16 职场文书
表彰会主持词
2014/03/26 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
初一学生期末评语
2014/04/24 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
感谢信的格式
2015/01/21 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
Django实现聊天机器人
2021/05/31 Python