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 选择表格(table)里的行和列及改变简单样式
Dec 15 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
Nov 25 Javascript
js点击选择文本的方法
Feb 09 Javascript
js代码实现下拉菜单【推荐】
Dec 15 Javascript
JS验证全角与半角及相互转化的介绍
May 18 Javascript
详解vue mint-ui源码解析之loadmore组件
Oct 11 Javascript
js 判断一个数字是不是2的n次方幂的实例
Nov 26 Javascript
js使用formData实现批量上传
Mar 27 Javascript
详解如何用webpack4从零开始构建react开发环境
Jan 27 Javascript
vue实现PC端录音功能的实例代码
Jun 05 Javascript
JS时间戳与日期格式互相转换的简单方法示例
Jan 30 Javascript
JavaScript声明变量和数据类型的转换
Apr 12 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
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
PHP 定界符 使用技巧
2009/06/14 PHP
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
Smarty保留变量用法分析
2016/05/23 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
Python实现在线程里运行scrapy的方法
2015/04/07 Python
详解Python Socket网络编程
2016/01/05 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
python打开文件的方式有哪些
2020/06/29 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
搞笑车尾标语
2014/06/23 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
2015个人半年总结范文
2015/03/09 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
小学同学聚会感言
2015/07/30 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript