首页 > 其他分享 >第七篇 vue - 基础 - 类与样式绑定

第七篇 vue - 基础 - 类与样式绑定

时间:2023-03-28 22:23:09浏览次数:51  
标签:style vue return 对象 绑定 第七篇 data class

Class 与 Style 绑定

数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。因为 class 和 style 都是 attribute,我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定

在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易出错的。因此,Vue 专门为 class 和 style 的 v-bind 用法提供了特殊的功能增强

除了字符串外,表达式的值也可以是对象或数组

绑定 HTML class

绑定对象

我们可以给 :class (v-bind:class 的缩写) 传递一个对象来动态切换 class:

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

上面的语法表示 active 是否存在取决于数据属性 isActive 的真假值

你可以在对象中写多个字段来操作多个 class。此外,:class 指令也可以和一般的 class attribute 共存。举例来说,下面这样的状态:

data() {
  return {
    isActive: true,
    hasError: false
  }
}

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

渲染的结果会是

<div class="static active"></div>
绑定的对象并不一定需要写成内联字面量的形式,也可以直接绑定一个对象

data() {
  return {
    classObject: {
      active: true,
      'text-danger': false
    }
  }
}

<div :class="classObject"></div>
这也会渲染出相同的结果。我们也可以绑定一个返回对象的计算属性。这是一个常见且很有用的技巧:

data() {
  return {
    isActive: true,
    error: null
  }
},
computed: {
  classObject() {
    return {
      active: this.isActive && !this.error,
      'text-danger': this.error && this.error.type === 'fatal'
    }
  }
}

<div :class="classObject"></div>
绑定数组

我们可以给 :class 绑定一个数组来渲染多个 CSS class:

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

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

渲染的结果是:

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

如果你也想在数组中有条件地渲染某个 class,你可以使用三元表达式:

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

errorClass 会一直存在,但 activeClass 只会在 isActive 为真时才存在

然而,这可能在有多个依赖条件的 class 时会有些冗长。因此也可以在数组中嵌套对象

<div :class="[{ active: isActive }, errorClass]"></div>
在组件上使用

对于只有一个根元素的组件,当你使用了 class attribute 时,这些 class 会被添加到根元素上,并与该元素上已有的 class 合并

<!-- 子组件模板 -->
<p class="foo bar">Hi!</p>

在使用时添加一些 class:

<!-- 在使用组件时 -->
<MyComponent class="baz boo" />

渲染出的 HTML 为:

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

如果你的组件有多个根元素,你将需要指定哪个根元素来接收这个 class。你可以通过组件的 $attrs 属性来实现指定

<!-- MyComponent 模板使用 $attrs 时 -->

<p :class="$attrs.class">Hi!</p>
<span>This is a child component</span>

<MyComponent class="baz" />

这将被渲染为:

<p class="baz">Hi!</p>
<span>This is a child component</span>

绑定内联样式

绑定对象

:style 支持绑定 JavaScript 对象值,对应的是 HTML 元素的 style 属性:

data() {
  return {
    activeColor: 'red',
    fontSize: 30
  }
}

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

尽管推荐使用 camelCase,但 :style 也支持 kebab-cased 形式的 CSS 属性 key (对应其 CSS 中的实际名称),例如:

<div :style="{ 'font-size': fontSize + 'px' }"></div>

直接绑定一个样式对象通常是一个好主意,这样可以使模板更加简洁:

data() {
  return {
    styleObject: {
      color: 'red',
      fontSize: '13px'
    }
  }
}

<div :style="styleObject"></div>

同样的,如果样式对象需要更复杂的逻辑,也可以使用返回样式对象的计算属性
绑定数组

我们还可以给 :style 绑定一个包含多个样式对象的数组。这些对象会被合并后渲染到同一元素上

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

标签:style,vue,return,对象,绑定,第七篇,data,class
From: https://www.cnblogs.com/caix-1987/p/17266996.html

相关文章

  • Vue——initProvide【十一】
    前言前面我们简单的了解了vue初始化时的一些大概的流程,这里我们详细的了解下具体的内容;内容这一块主要围绕init.ts中的initProvide进行剖析,初始化生命周期之后紧接着......
  • vue 软键盘组件封装
    场景和需求1软键盘固定2多输入框共用一个组件,聚焦切换时操作对象自动切换3根据光标在输入框的位置进行相应的输入和删除操作4点击软键盘时保存输入框光标活跃5输......
  • 记录--vue刷新当前页面
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助背景项目当中如果做新增/修改/删除等等操作通常情况下都需要刷新数据或者刷新当前页面.思路(1)如果......
  • vue-cookies用法
    importCookiesfrom'vue-cookies';constcookies={};cookies.set=function(name='default',value='',cookieSetting=60*60*24*365){Co......
  • vue全家桶进阶之路23:Element UI
    ElementUI是一套基于Vue.js的组件库,它提供了一系列常用的UI组件,包括表单、弹窗、布局、导航等等。ElementUI的设计风格简洁、易用、美观,且易于定制。ElementUI......
  • Spring boot 、Vue学习体会
    近期集中学习了Springboot、Vue等技术,学习过程也是不断碰壁,总的来说自认为有些涨进,抓住核心、深入关键、逐步剖析。两个技术分别负责后台和前端,学习后一个感受,两个技术......
  • Vue子组件向父组件传值(this.$emit()方法)
    子组件使用this.$emit()向父组件传值首先必须在父组件中引用子组件,然后实现传值第一步在父组件中引入子组件 importUnitByPurchaseAddOrUpdatefrom'@views/module......
  • vue图片上传前压缩图片
    前言需求:项目当中上传图片的需求点肯定有很多,再上传之后,如果图片很大的话,在加载的时候就会很慢。最近发现系统首次加载越来越慢,就开始思考怎么能降低这个加载时间,由于首页......
  • 第七章 工程化 - 实例体验 - 基于 vue框架 开发一个完整的组件库 一
    基于vue框架开发一个完整的组件库来体验前端工程化的魅力对一个组件库的开发来全面认识熟悉前端工程化的配置,系统的理解工程化中各个工具所起到的作用,并且将其最终可......
  • 第八章 工程化 - 实例体验 - 基于 vue框架 开发一个完整的组件库 二
    基础Monorepo环境建设包名选择与注册1、给组件库命名=>最终会发布到npm.js仓库2、查看组件库的命名是否可注册方法npmviewpackage-nameversion如......