视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Vue 样式绑定的实现方法
2020-11-27 22:02:09 责编:小采
文档


学习 Vue 的时候觉得样式绑定很简单,但是使用的时候总是容易搞晕自己。因为 :class 和 :style 里的数组语法和对象语法和 data 里绑定的值是不太一样的。这篇文章就简单对 Vue 绑定做个总结。

操作元素的class列表和内联样式是数据绑定的一个常见需求,因为它们都是属性,所以可用v-bind处理,通过表达式计算出字符串结果即可。不过字符串拼接麻烦且易错。因此,在将v-bind用于class和style时,Vue做了专门增强,表达式结果类型除了字符串之外,还可是对象或数组。

  • Class绑定
  • Style绑定
  • 绑定Class

    对象语法

    data 里的属性是负责 toggle 是否要这个 class,也就是一般定义 Boolean 类型的值。

    <div :class="{ active: isActive, 'text-danger': hasError }"></div>

    这里用 isActive 和 hasError 定义是否需要 active 和 text-danger 类。

    data: {
     isActive: true,
     hasError: false
    }
    

    渲染为

    <div class="active"></div>
    

    数组语法

    data 里负责定义 CSS 类名。

    <div :class="[activeClass, errorClass]"></div>
    

    这里定义了 activeClass 和 errorClass 的 CSS 类名是 active 和 text-danger。

    data: {
     activeClass: 'active',
     errorClass: 'text-danger'
    }

    渲染为

    <div class="active text-danger"></div>

    混合写法

    可以用混合的形式来绑定 class,即数组语法里写对象语法。所以 data 里的数据主要用于:

    1. 是否需要某个 class
    2. 定义 "class" 里面的类名
    <div :class="[{ active: isActive }, errorClass]"></div>

    这里定义了 errorClass 的 CSS 类名为 text-danger,并用 isActive 定义是否需要 active 类。

    data: {
     errorClass: 'text-danger',
     isActive: true
    }
    

    渲染为

    <div class="active text-danger"></div>
    

    绑定Style

    对象语法

    data 里的属性是定义 style 里的值。与 class 不一样,class 是定义是否要这个 class的。

    <div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

    这里定义了 style 里的 color 和 font-size 的值。

    data: {
     activeColor: 'red',
     fontSize: 30
    }
    

    渲染为

    <div style="color: red; font-size: 30px"></div>

    数组语法

    可以绑定多个样式对象到 style 上

    <div :style="[baseStyles, overridingStyles]"></div>
    

    这里在 data 里用 styleObject 定义了 color 和 font-size,再用 overridingStyles 定义了 background 和 margin。然后在组件里用数组进行混合绑定。

    data: {
     styleObject: {
     color: 'red',
     fontSize: '13px'
     },
     overridingStyles: {
     background: 'green',
     margin: '13px'
     }
    }
    

    渲染为

    <div style="color: red; font-size: 13px; background: green; margin: 13px;"></div>
    

     

    下载本文
    显示全文
    专题