zoukankan      html  css  js  c++  java
  • Class与Style绑定

    本文主要介绍如何使用Vue来绑定操作元素的class列表和内联样式(style属性).

    因为class和style都是属性,所以通过v-bind命令来处理它们:只需要通过表达式计算出结果即可,不过字符串拼接麻烦且易错。因此,再将v-bind用于class和style属性时,Vue.js做了专门的增强,表达式结果类型除了字符串以外还可以是对象或者数组.

    1、对象语法

    (1)、绑定的数据对象内联在模版中

    我们可以通过给html标签追加v-bind:class的指令,以动态的切换class,html代码如下:

    <body>
        <div id="pageIndex">
            <div class="static" v-bind:class="{active:isActive,'text-danger':hasError}">aaa</div>
        </div>
    </body>

    上面代码中的active和text-danger这两个类选择器是否存在取决于数据属性中的isActive和hasError是否为true,为true的话,类选择器就不存在,js代码如下:

    var currentPage=new Vue({
          el:"#pageIndex",
          data:{
              isActive:true,
              hasError:true
          }
    });

    如上代码所示,v-bind:class指令可以和普通class共存,当isActive和hasError发生变化时,class列表也会进行相应的更新,

    (2)、绑定的数据对象不内联在模版中

    <body>
        <div id="pageIndex">
            <div class="static" v-bind:class="classObject">aaa</div>
        </div>
    </body>
    <script type="text/javascript">
        var currentPage=new Vue({
            el:"#pageIndex",
            data:{
                classObject:{
                    "active":true,
                    "text-danger":true
                }
            }
        });
    </script>

    结果和(1)中的一模一样.

    (3)、绑定的数据对象不内联在模版中,且该数据对象可以通过计算属性得出

    <body>
        <div id="pageIndex">
            <div class="static" v-bind:class="classObject">aaa</div>
        </div>
    </body>
    <script type="text/javascript">
        var currentPage=new Vue({
            el:"#pageIndex",
            data:{
                isActive:true,
                error:null
            },
            computed:{
                classObject:function(){
                    return {
                         active:this.isActive && !this.error,
                        'text-danger':this.error && this.error.type === 'fatal'
                    }
                }
            }
        });
    </script>

    (4)、绑定内联样式

    Vue通过v-bind:style指令给dom元素绑定样式,v-bind:style看着非常像css,但它其实是一个Javascript对象.CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用单引号括起来) 来命名:

    <body>
        <div id="pageIndex">
            <div v-bind:style="{color:activeColor,fontSize:fontSize+'px'}">aaa</div>
        </div>
    </body>
    <script type="text/javascript">
        var currentPage=new Vue({
            el:"#pageIndex",
            data:{
                activeColor: 'blue',
                fontSize: 30
            }
        });
    </script>

    上述语法虽然正确,但是直接绑定一个样式对象会更好,这会让模版更清晰:

    <body>
        <div id="pageIndex">
            <div v-bind:style="styleObject">aaa</div>
        </div>
    </body>
    <script type="text/javascript">
        var currentPage=new Vue({
            el:"#pageIndex",
            data:{
                styleObject:{
                    color: 'red',
                    fontSize: '13px'
                }
            }
        });
    </script>

    同样的对象语法常常结合计算属性使用.

    2、数组语法

    (1)、普通用法

    Vue提供了一种机制,可以把一个数组传递给v-bind:class,以应用一个class列表:

    <body>
        <div id="pageIndex">
            <div v-bind:class="[activeClass, errorClass]">aaa</div>
        </div>
    </body>
    <script type="text/javascript">
        var currentPage=new Vue({
            el:"#pageIndex",
            data:{
                activeClass:"active",
                errorClass:"text-danger"
            }
        });
    </script>

    (2)、数组语法中使用三元表达式切换列表中的class

    如果你想根据条件切换列表中的class,可以使用三元表达式,Vue支持在数组语法中使用三元表达式.

    <body>
        <div id="pageIndex">
            <div v-bind:class="[isActive?activeClass:'',errorClass]">aaa</div>
        </div>
    </body>
    <script type="text/javascript">
        var currentPage=new Vue({
            el:"#pageIndex",
            data:{
                isActive:false,
                activeClass:"active",
                errorClass:"text-danger"
            }
        });
    </script>

    (3)、数组语法中嵌套对象语法

    当有多个条件class时上面的在数组语法中使用三元表达式难免有点繁琐,所以这个时候可以在数组语法中嵌套对象语法,使代码尽可能的简洁,代码如下:

    <body>
        <div id="pageIndex">
            <div v-bind:class="[{activeClass:isActive},errorClass]">aaa</div>
        </div>
    </body>
    <script type="text/javascript">
        var currentPage=new Vue({
            el:"#pageIndex",
            data:{
                isActive:true,
                activeClass:"active",
                errorClass:"text-danger"
            }
        });
    </script>

    (4)、绑定内联样式

    v-bind:style 的数组语法可以将多个样式对象应用到同一个元素上,代码如下:

    <body>
        <div id="pageIndex">
            <div v-bind:style="[baseStyles, overridingStyles]">aaa</div>
        </div>
    </body>
    <script type="text/javascript">
        var currentPage=new Vue({
            el:"#pageIndex",
            data:{
                baseStyles:{
                    color:"blue"
                },
                overridingStyles:{
                    background:"yellow"
                }
            }
        });
    </script>

    注:当 v-bind:style 使用需要添加浏览器引擎前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀。

    3、多充值

    从 2.3.0 起你可以为 style 绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:

    <div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>

    这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex

  • 相关阅读:
    动态增加数据库表字段
    Centos7 + Python3.6 + Django + virtualenv + gunicorn + supervisor 环境配置详解
    typeof关键字简介 -rtti
    c++ typeid获取类型名-rtti
    C++ 中dynamic_cast&lt;&gt;的使用方法小结 -判断类型-rtti
    Java 8 Lambda表达式探险
    Lambda表达式详解
    android:ToolBar详解(手把手教程)(转)
    linux numfmt 命令--转换数字
    android mk odex问题 push apk 不生效
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/7819571.html
Copyright © 2011-2022 走看看