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常用特效方法使用示例
Apr 25 Javascript
jQuery中scrollTop()方法用法实例
Jan 16 Javascript
用户代理字符串userAgent可实现的四个识别
Sep 20 Javascript
js实现简单的碰壁反弹效果
Aug 30 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 Javascript
javascript 中iframe高度自适应(同域)实例详解
May 16 Javascript
webpack-dev-server自动更新页面方法
Feb 22 Javascript
jquery层次选择器的介绍
Jan 18 jQuery
Vue 中如何正确引入第三方模块的方法步骤
May 05 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
JS实现放烟花效果
Mar 10 Javascript
vue实现登陆页面开发实践
May 30 Vue.js
实例讲解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
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
Three.js基础部分学习
2017/01/08 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
python读取Android permission文件
2013/11/01 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
Python类如何定义私有变量
2020/02/03 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
Python Django搭建网站流程图解
2020/06/13 Python
python可以用哪些数据库
2020/06/22 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
渡河少年教学反思
2014/02/12 职场文书
房屋买卖协议书
2014/04/10 职场文书
购房协议书范本
2014/04/11 职场文书
关于读书的演讲稿
2014/05/07 职场文书
政风行风建设责任书
2014/07/23 职场文书
儿子满月酒致辞
2015/07/29 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android