Vue.js样式动态绑定实现小结


Posted in Javascript onJanuary 24, 2019

在项目中,我们时常会遇到动态的去绑定操作切换不同的CSS样式,结合自身项目中遇到的一些情况,也参考了一些文档,针对vue.js样式的动态绑定切换做出如下小结:

动态切换的核心思想:

利用vue指令v-bind来实现动态绑定,从而设置切换不同的样式~

vue的最大特点是数据驱动,利用特殊的语法将DOM“绑定”到底层数据,DOM与数据保持同步,每当数据发生变化,DOM视图就会做出相应的更新和响应,正是基于这种特性,我们得以实现class和style的动态绑定~

(一定要充分理解数据驱动的含义,共勉~)

特别说明:

1. v-bind在处理class和style时,专门增强了它。表达式的结果类型不仅可以是字符串,还可以是对象和数组。

v-bind用于绑定属性和数据 ,其缩写为“ : ” 也就是v-bind:id === :id 。

根据不同的项目需求和不同的实现思路,现初步总结了如下方法:

(欢迎小伙伴们补充添加,一起进步~~)

class属性绑定

1. 三目元算符方式:

<!--vue代码-->
    <ul>
      <li v-for="item in itemData" :key="item">
        <i :class="item.isA ? 'class_a' : 'class_b'"></i> 
      </li>
    </ul>

 <!-- CSS代码 -->
  .class_a,.class_b{
    /*这里可以写一些公共样式*/
  }

  .class_a{
    /*这里写需要设置的第一种样式*/
  }

  .class_b{
    /*这里写需要设置的第二种样式*/
  }

2. 基本绑定:

<!--vue代码-->
  <div :class="{class_a:isActive}"></div>

<!-- 博主在这里用vue-cli做例子,小伙伴们注意与vue的区别 -->
  export default {
    name: "test1",
    data(){
      return{
        isActive:true
      }
    }
  }

<!-- CSS代码 -->
  .class_a{
    /*这里写需要设置的样式*/
  }

以上可以根据isACtive的值,动态判断来进行class样式的绑定。

特别说明:

1. vue 的分隔符默认是 {{ }}, 在分隔符里面的字符串会被认为是数据变量,可以通过 class="{{ className }}" 方式设置class,但是vue不推荐这种方式与 v-bind:class 的方式混用,二者只能选其一。

2. v-bind:class 虽然与class属性里绑定变量的方式不能共存,却可以与原生的class特性共存,即 一个DOM标签中允许同时出现原生class和v-bind:class。

3. 为了避免不必要的问题,要写在data中的值尽量不要用中划线,可以采用下划线~如果data中用中划线的话,需要加单引号,否则出错,而且,在v-bind中使用时,也需要加单引号。加上单引号又无法识别数据,默认为true。
3. 可以传入多个属性动态切换多个class

<!--vue代码-->    <div :class="{class_a:isActive,class_b:isActive_b}"></div>

4. 对象绑定

<!--vue代码-->
    <div :class="classObject"></div>

<!-- 博主在这里用vue-cli做例子,小伙伴们注意与vue的区别 -->
  export default {
    name: "test1",
    data(){
      return{
        classObject:{
          class_a:true,
          class_b:true
        }
      }
    }
  }

<!-- CSS代码 -->
  .class_a{
    /*这里写需要设置的第一种样式*/
  }

  .class_b{
    /*这里写需要设置的第二种样式*/
  }

特别说明:

这里v-bind直接利用对象进行绑定,需注意对象中的键名应与class样式名保持一致。

5. 数组绑定

数组里的变量改变时,动态更新class列表

<!--vue代码-->
    <div :class="[classA,classB]"></div>

<!-- 博主在这里用vue-cli做例子,小伙伴们注意与vue的区别 -->
  export default {
    name: "test1",
    data(){
      return{
        classA:'class_a',
        classB:'class_b'
      }
    }
  }

<!-- CSS代码 -->
  .class_a{
    /*这里写需要设置的第一种样式*/
  }

  .class_b{
    /*这里写需要设置的第二种样式*/
  }

6. 绑定返回对象的计算属性

强大且常用的模式~

<!--vue代码-->
    <div v-bind="classObject"></div>

<!-- 博主在这里用vue-cli做例子,小伙伴们注意与vue的区别 -->
  export default {
    name: "test1",
    data(){
      return{
        isActive:true
      }
    },
    computed:{
      classObject:function () {
        return{
          class_a:this.isActive,
          class_b:!this.isActive
        //  这里要结合自身项目情况修改填写
        }
      }
    }
  }

<!-- CSS代码 -->
  .class_a{
    /*这里写需要设置的第一种样式*/
  }

  .class_b{
    /*这里写需要设置的第二种样式*/
  }

style属性绑定(内联)

1. 直接设置样式

<!--vue代码-->
    <div :style="color:selectedColor,fontsize:fontSize + 'px'"></div>

<!-- 博主在这里用vue-cli做例子,小伙伴们注意与vue的区别 -->
    export default {
      name: "test1",
      data(){
        return{
          selectedColor:pink,
          fontSize:20
        //  注意前后名称的一致性
        }
      }
    }

2. 也可以使用对象

(可以参照上述class)

<!--vue代码-->
    <div :style="styleObject"></div>

<!-- 博主在这里用vue-cli做例子,小伙伴们注意与vue的区别 -->
    export default {
      name: "test1",
      data(){
        return{
          styleObject{
            selectedColor:pink,
            fontSize:20
          }
        }
      }
    }

3. 使用数组

<!--vue代码-->
    <div :style="[styleA,styleB]"></div>

<!-- 博主在这里用vue-cli做例子,小伙伴们注意与vue的区别 -->
  export default {
    name: "test1",
    data(){
      return{
        styleA:{
          color:'red',
          fontSize: '30px'
        },
        styleB:{
          color:'green',
          fontSize: '15px'
        },
      }
    }
  }

小伙伴们可根据上述方法结合自身项目情况修改调用,如有问题,欢迎交流

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery 设置标题的自动翻转
Oct 03 Javascript
js控制input输入字符解析
Dec 27 Javascript
Jquery对象和Dom对象的区别分析
Nov 20 Javascript
JavaScript实现网页加载进度条代码超简单
Sep 21 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
AngularJS封装$http.post()实例详解
May 06 Javascript
vue服务端渲染添加缓存的方法
Sep 18 Javascript
JavaScript对象拷贝与赋值操作实例分析
Dec 10 Javascript
JavaScript常用工具方法封装
Feb 12 Javascript
vue中img src 动态加载本地json的图片路径写法
Apr 25 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
Apr 08 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
Nov 03 Javascript
实例讲解JavaScript预编译流程
Jan 24 #Javascript
实例讲解vue源码架构
Jan 24 #Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
Jan 24 #Javascript
JavaScript私有变量实例详解
Jan 24 #Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 #Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 #Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 #jQuery
You might like
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
php页面防重复提交方法总结
2013/11/25 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
JavaScript模块详解
2017/12/18 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
[01:00:10]完美世界DOTA2联赛PWL S2 FTD vs Inki 第二场 11.21
2020/11/24 DOTA
python查找指定具有相同内容文件的方法
2015/06/28 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
python实现感知器
2017/12/19 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
python内打印变量之%和f的实例
2020/02/19 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
Django框架请求生命周期实现原理
2020/11/13 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
运动会领导邀请函
2014/01/10 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL