• Vue 官方文档2.x教程学习笔记 1 基础 1.6 Class 与 Style 绑定 1.6.1 绑定HTML Class


    Vue 官方文档2.x教程学习笔记

    1 基础

    1.6 Class 与 Style 绑定

    操作元素的 class 列表和内联样式是数据绑定的一个常见需求。

    因为它们都是 attribute,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。

    不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 classstyle 时,Vue.js 做了专门的增强。表达式结果的类型除了字符串之外,还可以是对象或数组。

    1.6.1 绑定HTML Class

    【对象语法】

    我们可以传给 v-bind:class 一个对象,以动态地切换 class:

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
    
    <div id="app">
        <div v-bind:class="{active : isActive}">HTMLClass 绑定div>
    div>
    
    <script src="../js/vue.js">script>
    <script>
        var vm = new Vue({
    
            el: '#app',
            data: {
                isActive: true
            }
    
        })
    script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    上面的语法表示 active 这个 class 存在与否将取决于数据 property isActive 的 truthiness【真值】。

    浏览器效果

    在这里插入图片描述

    也可以在对象中传入更多字段来动态切换多个 class。此外,v-bind:class 指令也可以与普通的 class 属性共存。

    当有如下模板:

    在这里插入图片描述

    isActive 或者 hasError 变化时,class 列表将相应地更新。

    在这里插入图片描述

    这样子写的话,有点麻烦,绑定的数据对象都内联式的定义在模板里了。

    【其实不必【直接封装成一个对象】】

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
    
    <div id="app">
        <div v-bind:class="classObject">div>
    div>
    
    <script src="../js/vue.js">script>
    <script>
        var vm = new Vue({
    
            el: '#app',
            data: {
                classObject: {
                    static: true,
                    active: true,
                    'text-danger': true
                }
            }
    
        })
    script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    渲染效果

    在这里插入图片描述

    也可以在这里绑定一个返回对象的计算属性。【这是一个常用且强大的模式】

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
    
    <div id="app">
        <div v-bind:class="classObject">div>
    div>
    
    <script src="../js/vue.js">script>
    <script>
        var vm = new Vue({
    
            el: '#app',
            data: {
                isActive: true,
                error: null
            },
            computed: {
                classObject: function (){
                    return {
                        active: this.isActive && !this.error,
                        'text-danger': this.error && this.error.type === 'fatal'
                    }
                }
            }
    
        })
    script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    渲染效果

    在这里插入图片描述

    【数组语法】

    我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
    
    <div id="app">
        <div v-bind:class="[activeClass , errorClass]">div>
    div>
    
    <script src="../js/vue.js">script>
    <script>
        var vm = new Vue({
    
            el: '#app',
            data: {
                activeClass: 'active',
                errorClass: 'text-danger'
            }
    
        })
    script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    渲染结果

    在这里插入图片描述

    如果想根据条件切换列表中的 class,可以用三元表达式:

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
    
    <div id="app">
        <div v-bind:class="[isActive ? activeClass : '', errorClass]">div>
    div>
    
    <script src="../js/vue.js">script>
    <script>
        var vm = new Vue({
    
            el: '#app',
            data: {
                isActive: false,
                activeClass: 'active',
                errorClass: 'text-danger'
            }
    
        })
    script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

    这样写将始终添加 errorClass,但是只有在 isActive 是 truthy【真】时才添加 activeClass

    不过,当有多个条件 class 时这样写有些繁琐。所以在数组语法中也可以使用对象语法:

    <div v-bind:class="[{ active: isActive }, errorClass]">div>
    
    • 1

    【用在组件上】

    当在一个自定义组件上使用 class property 时,这些 class 将被添加到该组件的根元素上面。

    这个元素上已经存在的 class 不会被覆盖。

    [举个栗子]

    声明组件:

    Vue.component('my-component', {
        template: '

    Hi

    >'
    })
    • 1
    • 2
    • 3

    在这里插入图片描述

    在使用它的时候添加一些class :

    在这里插入图片描述

    最终的渲染结果

    在这里插入图片描述

    嗯,添加到组件的根元素上了。

    对于带数据绑定 class 也同样适用:

    在这里插入图片描述

    isActive 为 truthy【真】时,HTML 将被渲染成为:

    <p class="foo bar active">Hip>
    
    • 1
  • 相关阅读:
    PyQt,PySide-槽函数被执行了两次
    RabbitMQ实现延迟消息的方式-死信队列、延迟队列和惰性队列
    OpenCV 直方图和归一化
    Gin 中使用日志
    计算机毕业设计(附源码)python游泳馆管理平台
    【springboot】6、Spring Initailiz
    会计电子档案系统方案
    CMS 三色标记【JVM调优】
    刷题笔记(二十)--回溯算法:组合问题
    java列表对象操作
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/128169132