• vue2.x学习笔记(六)


    接着前面的内容:https://www.cnblogs.com/yanggb/p/12571171.html

    class与style绑定

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

    绑定class的对象语法

    我们可以传一个对象给【v-bind:class】指令,以达到动态切换class的目的。

    <div v-bind:class="{ active: isActive }"></div>

    上面的语法,表示active这个class的存在与否,取决于数据属性isActive的truthiness。

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

    <div
      class="static"
      v-bind:class="{ active: isActive, 'text-danger': hasError }"></div>
    data: {
      isActive: true,
      hasError: false
    }

    以上的结果将会被渲染为:

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

    普通的class属性会和【v-bind:class】指令的结果合并,而当isActive或者hasError变化的时候,class列表也将被相应地更新。

    此外,绑定的数据对象也可以不必内联定义在模板内,提出来也是支持的。

    <div v-bind:class="classObject"></div>
    data: {
      classObject: {
        active: true,
        'text-danger': false
      }
    }

    渲染出来的结果和上面是一样的。更多的,我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式。

    <div v-bind:class="classObject"></div>
    data: {
      isActive: true,
      error: null
    },
    computed: {
      classObject: function () {
        return {
          active: this.isActive && !this.error,
          'text-danger': this.error && this.error.type === 'fatal'
        }
      }
    }

    这样,classObject会自动随着isActive和error的变化而变化,方便了我们实时切换样式。

    绑定class的数组语法

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

    <div v-bind:class="[activeClass, errorClass]"></div>
    data: {
      activeClass: 'active',
      errorClass: 'text-danger'
    }

    以上的结果将被渲染为:

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

    在这里可以看得出,数组的语法使用的是键绑定的做法,传一个键的数组,vue会自动将值映射到class中。

    另外,绑定class的数组语法也支持条件控制,可以使用三元表达式。

    <div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

    不过,这样的语法可读性较低,且当有多个条件class的时候会显得有点繁琐,因此vue还支持在数组的语法中使用对象的语法。

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

    这样写和上面的结果是一样的,但是可读性就稍微提高了一丢丢。

    绑定class到组件上

    当在一个自定义的组件上使用class属性的时候,这些class将会被添加到该组件的根元素上面,这个元素上已经存在的class不会被覆盖,而是会合并。

    声明一个组件:

    Vue.component('my-component', {
      template: '<p class="foo bar">Hi</p>'
    })

    然后再使用这个组件的时候给这个组件实例添加一些class:

    <my-component class="baz boo"></my-component>

    那么这个组件最终会在html中被渲染为:

    <p class="foo bar baz boo">Hi</p>

    这里要注意的是,只有根元素会继承这些个class,根元素下的子孙元素是不会继承这些个class的。

    绑定内联样式的对象语法

    【v-bind:style】的对象语法十分直观,因为看起来就非常像css,但它其实是一个javascript对象。css属性名可以用驼峰式(camelCase)或者短横线分隔(kebab-case)来命名。

    <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
    data: {
      activeColor: 'red',
      fontSize: 30
    }

    内联定义在模板中显然可读性较差,因此直接绑定到一个样式对象通常是更好的做法,会使模板变得更清晰。

    <div v-bind:style="styleObject"></div>
    data: {
      styleObject: {
        color: 'red',
        fontSize: '13px'
      }
    }

    同样的,对象语法常常结合返回对象的计算属性使用。

    绑定内联样式的数组语法

    【v-bind:style】的数组语法可以将多个样式对象应用到同一个元素上。

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

    绑定的就是键值对对象的数组。

    绑定内联样式自动添加前缀

    我们知道,一些css属性因为浏览器的兼容性问题,是需要添加浏览器引擎前缀的,比如transform,当我们使用【v-bind:style】指令绑定内联样式的时候,vue也会自动检测并添加相应的前缀。这是vue十分人性化的一点,因为浏览器的兼容性前缀常常是一个令人头疼的问题,重复且冗余。

    绑定内联样式的多重值

    从2.3.0开始,开发者可以为style绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值。

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

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

    "我还是很喜欢你,像春风守护着晨曦,不曾远去。"

  • 相关阅读:
    人月神话阅读笔记(三)
    MongoDB设置用户名以及密码
    pdf.js使用总结#如何在网页读取并显示PDF格式文档
    Python中eval函数的作用
    寒假学习笔记(13)
    寒假学习笔记(12)
    寒假学习笔记(11)
    寒假学习笔记(10)
    寒假学习笔记(9)
    寒假学习笔记(8)
  • 原文地址:https://www.cnblogs.com/yanggb/p/12576797.html
Copyright © 2020-2023  润新知