Vue | 06 类和样式绑定

news/2024/7/10 2:41:41 标签: vue, frontend technology, framework

内容提要:

  1. 绑定HTML classes的语法:对象语法、数组语法、在组件上的使用
  2. 绑定内联样式的语法:对象语法、数组语法、自动加前缀与多个值的使用

对于数据绑定的一种常见需要是操作元素的类列表和它的内联样式。由于它们都是属性,我们能用v-bind管理他们。我们仅仅需要使用我们的表达式计算最后的字符串。然而,字符串串联的干扰是令人烦恼和易于出错的。因为这个原因,当v-bind用于classstyle的时候Vue提供了特定的改进手段。除了字符串,表达式也可以使用对象和数组作计算。

绑定HTML类

对象语法

我们能传递一个对象给v-bind:class去动态的触发类:

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

以上语法意味着active类的存在与否取决于isActive的真实性。

通过在对象中使用多个字段你能够使多个类被触发。另外,v-bind:class指令也能够与纯class属性共存于一个标签。

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

如果是以下数据:

data:{
    isActive:ture,
    hasError: false
}

它将被渲染为如下形式:

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

isActivehasError改变的时候,类的列表会相应的更新。例如,如果hasError变成true,类列表将变成“static active text-danger”.

绑定对象不必在行内:

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

这将返回相同的结果,我们也能够绑定一个computed property 返回一个对象。这是一种常用的和强大的模式:

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

数组语法

我们能够传递一个数组给v-bind:class 去使用一个类列表:

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

它将被渲染为:

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

如果你想根据列表的条件去触发一个类,你可以使用三元表达式:

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

这将总是请求errorClass,但是仅仅isActive为真时请求activeClass

然而,如果有多个条件的class可能有一点长,这就是为什么在数组语法内使用对象语法:

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

组件中使用

这部分内容假定你有 Vue Components知识。你可以选择跳过这节稍后再回来。

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

例如,如果你声明了这个组件:

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

当使用它的时候添加一些classes:

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

HTML将被渲染成:

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

class绑定也是同样的道理:

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

isActive为真的时候,HTML将被渲染成:

<p class="foo bar active">Hi</p>

创建内联样式

对象语法

v-bind:style对象语法相当简单-它看起来和CSS很像,只是它是JavaScript对象。你即可以使用驼峰或短横线隔开(用单引号括起来)来命名CSS属性:

<div v-bind:style="{color: activeColor, 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属性在v-bind:style中请求vendor prefixes ,例如transform,Vue将自动寻找和添加合适的前缀给到所使用的样式。

多个值

2.3.0+

从2.3.0+开始你能提供一个数组的多个值给到一个样式属性,例如:

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

这里对于支持的浏览器仅仅渲染最后一个值。在这个例子里,它将渲染为display:flex用于支持非前缀版本的flexbox的浏览器。


http://www.niftyadmin.cn/n/1035784.html

相关文章

Vue | 07 条件渲染

v-if的用法详解v-show的用法v-if与v-show的用法比较v-if与v-for联合使用的建议 v-if 在字符串模板里&#xff0c;例如 Handlebars&#xff0c;我们像这样写一个条件模块&#xff1a; <!-- Handlebars template --> {{#if ok}} <h1>Yes</h1> {{/if}}在Vue我…

三.自定义View onMeasure onLayout onDraw

知识点整理1 View树的绘制流程1.1 View的添加2.1 View绘制流程1 View树的绘制流程 View树的绘制流程是谁负责的&#xff1f; view树的绘制流程是通过ViewRoot去负责绘制的&#xff0c;主要作用是View树的管理者&#xff0c;负责将DecorView和PhoneWindow“组合”起来。 View树…

Vue | 08 列表渲染

内容提要: v-for映射数组与对象的用法 key值的作用与用法 数组变化检测 3.1 数组可变方法 3.2 如何替换数组 3.3 数组index/length赋值不能响应变化的处理方法 对象无法响应变化的处理 如何显示过滤/或排序的结果 v-for与范围、template上使用v-for v-for与v-if的优先级处…

四.自定义View MeasureSpec

知识点整理MeasureSpec定义SpecMode 有如下三种&#xff1a;MeasureSpec 意义&#xff1a;MeasureSpec值的确定MeasureSpec 1.自定义View时&#xff0c;在onMeasure时&#xff0c;会用到MeasureSpec&#xff0c;MeasureSpec通俗的讲叫测量规格。 2.一个普通View的最终宽高有父…

Vue | 09 事件处理

内容提要&#xff1a; 事件监听、方法事件的处理、内联方法处理事件修饰符、键修饰符、系统修饰符键&#xff08;.exact修饰符、鼠标事件修饰符&#xff09;在HTML中监听事件的好处 监听事件 当事件被触发的时候我们可以使用v-on指令去监听DOM事件和运行一些JavaScript。 例如…

五 自定义View LayoutParams

知识点整理1. LayoutParams2. MarginLayoutParams3 LayoutParams与View如何建立联系4 自定义LayoutParams4.1 创建自定义属性4.2 继承MarginLayout4.3 重写ViewGroup中几个与LayoutParams相关的方法5 LayoutParams常见的子类1. LayoutParams LayoutParams翻译过来就是布局参数…

四个视角理解Activity的启动

知识点整理理解角度一.Android 软件体系结构二. Task 启动方式三.Activity的生命周期全面分析3.1 生命周期分为两种&#xff1a;1.典型情况下的生命周期分析2.异常情况下的生命周期分析2.1 系统配置变化导致Activity销毁重建2.2 资源内存不足导致低优先级的Activity被回收3.2 生…

Vue | 10 表单输入绑定

内容提要&#xff1a; 基本用法&#xff1a;文本、多行文本、复选框、单选框、下拉列表&#xff1b;复选框、单选框、列表选项的值绑定&#xff1b;.lazy .number .trim修饰符。 基本用例 你能用v-model指令去创建双向的数据绑定在表单的输入框&#xff0c;文本框&#xff0c;…