十分钟速通 Vue 动态 Class、Style

news2025/4/7 18:52:33

计算属性

大家有没有思考过这样一个问题,下面这段代码,功能上没什么问题,但是读起来很费劲,因为需要思考过后,才能知道这段代码的意思。

<p>{{ message.split('').reverse().join('') }}</p>

这完全不符合面向对象的思想(关注功能,不关注过程),如果改成下面这种写法,是不是更清晰呢?

<p>{{ reverseMessage }}</p>

这就是这一节要学习的计算属性.

计算属性

计算属性是继datamethodswatch之后的又一个新成员

书写位置

跟其他属性一样,计算属性也是通过键值对的方式添加,并且没有先后顺序:

<script>
  export default {
    name: 'app',
    // 计算属性
    computed: {},
  };
</script>
计算属性的写法

计算属性内部是由一系列方法组成的键值对,键是方法名,值是方法体,以文章开头的代码为例,计算属性可以这样写:

<script>
  export default {
      name: "app",
      data:function(){
          return {
              message:"message"
          }
      }
      // 计算属性
      computed:{
          reverseMessage:function(){
              return this.message.split('').reverse().join('')
          }
      }
  };
</script>
计算属性和方法的区别

其实上面的案例,使用methods也可以实现,实现方式如下:

<div id="app">
  <p>原字符串:{{ message }}</p>
  <p>反转后的字符串:{{ reverseMessage() }}</p>
</div>
<script>
  export default {
    name: 'app',
    data: function () {
      return {
        message: '优课达--学的比别人好一点~',
      };
    },
    methods: {
      reverseMessage: function () {
        return this.message.split('').reverse().join('');
      },
    },
  };
</script>

看起来没什么区别,无非是将reverseMessage改成了reverseMessage(),将方法的位置改到了methods中,但是为什么要去选择计算属性呢?

这是因为计算属性的两个性质:依赖缓存

**依赖:**案例中message就是计算属性的依赖 **缓存:**上一次计算得到的值

结合上面的案例解释一下:

计算属性:

  • message 发生改变(即依赖变化),reverseMessage 计算属性会重新计算,然后返回计算结果;
  • message 不发生改变(即依赖不变化),reverseMessage 计算属性会返回缓存的值,而不会重新计算。

方法:

  • 每次访问的时候,都会去执行方法体里的逻辑,然后返回结果。

总结:计算属性避免了不必要的代码执行,性能更优

动态 class

动态样式绑定就是根据条件去给某个标签添加样式,其实在学习JavaScript的时候,就遇到过这种情况

let currentIndex = 0;
function clickFn(index) {
  if (currentIndex === index) {
    element.style.backgroundColor = 'green';
  }
}

动态样式绑定

在 Vue 中提供了更方便的方案来实现,就是动态样式绑定

动态样式绑定的语法如下:

<div class="base" v-bind:class="{ active: isActive }"></div>
.active {
  border: 1px solid green;
}
  • active是类名,对应CSS样式中的类名;
  • isActiveboolean类型的值,决定是否应用该类名。

1. 类名的书写

如果是单个单词的类名,如active,就跟上面的写法一样,如果是带连字符的类名base-active,就需要用引号(双引号""|单引号’')引起来:

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

2. 引号规则

如果大括号用双引号引起来("{}")那么里面的类名就要用单引号引起来('base-active'),反之相反

<!-- 外双内单 -->
<div v-bind:class="{ 'base-active': isActive }"></div>
<!-- 外单内双 -->
<div v-bind:class='{ "base-active": isActive }'></div>

3. 多类名写法

动态样式绑定还可以绑定多个类,写法很简单,往对象({})里面填内容就完事儿了:

<div v-bind:class='{ "base-active": isActive,"base":true}'></div>

入门案例

学到这里,就可以使用之前学习的知识结合动态样式绑定的知识写一个简单的案例了,案例效果如下:

img

动态样式绑定的条件类型

现在我们来说一下,动态样式绑定的条件,也就是类名后面的boolean值,如何去获取这个布尔值,是接下来要掌握的内容。

1. 变量形式

比如说入门案例,就使用的是变量形式来获取布尔值的

<div :class="{ hover: isActive }">手机/运营商/数码</div>

data中定义布尔类型的变量

data:function(){
    return {
        isActive:false
    }
}

最后通过用户事件来改变布尔值,从而改变动态绑定的样式

2. 方法形式

方法形式在循环渲染中用的比较多,这里可以用一个案例来说明一下:

img

图中的“新”字就是用过方法形式来渲染的,来看一下数据:

data:function(){
    return {
        liListData: [
            {
            imgUrl:
                'https://m.360buyimg.com/babel/jfs/t1/30057/19/14881/720/5cbf064aE187b8361/eed6f6cbf1de3aaa.png',
            text: '话费',
            type: 'NEW',
            },
        ]
    }
}

数据中type字段决定是否显示“新”这个字样。但是它并不是布尔值,所以需要用一个方法来转换一下,这时候就用到了方法形式,核心代码如下:

<span :class="{ 'new-appear': isActive(item.type) }"></span>

定义方法:

isActive: function(type) {
    if (type === 'NEW') {
        return true;
    }
    return false;
}

3. 表达式形式

其实在上面这个例子中,是没有必要使用方法的,因为逻辑过于简单,完全可以在 HTML 标签上使用表达式来解决

<span :class="{ 'new-appear': item.type === 'NEW' }"></span>

这样一来是不是节省了很多代码呢?没错,随着学习的深入,解决问题的方法越来越多,选择最好的方法就显得尤为重要。

建议大家在刚才的代码中做一些修改,看看是否有效。

4. 计算属性形式

上面这个案例的效果,使用计算属性是做不到的,但是可以改造一下“入门案例”。

将样式对象以及判断条件都放在计算属性内:

computed: {
  hoverObj: function () {
    return {
      hover: this.index === 1,
    };
  },
},

动态样式绑定的写法

动态样式绑定有两种写法:

  1. 对象写法
  2. 数组写法
1. 对象写法

前面我们用的都是对象写法,它可以写单个属性

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

也可以写多个属性

<div v-bind:class="{ active: isActive ,hover:true,'after-hover':false}"></div>
2. 数组写法

对象的写法遵从键值对的规则,数组的写法当然也要遵从数组的规则,往里面添加类名即可

常规写法

注意这里的类名都要带引号

<div v-bind:class="['red-style', 'font-style']"></div>

数组中使用三元表达式

有时候某个样式类可能会根据条件决定要不要应用,所以需要三元表达式去帮助实现:

<div v-bind:class="['red-style', 'font-style',isChoosed ? 'redbg' : '']"></div>

你也可以使用三元表达式实现两个类名的二选一

<div
  v-bind:class="['red-style', 'font-style',isChoosed ? 'redbg' : 'bluebg']"
></div>

在数组中使用对象

上面的第一个写法,其实是有点多余的,既然isChoosedfalse的时候,没有类名被应用到标签上,那么完全没必要去写呀。

所以结合对象的写法,可以将三元表达式改写成数组中使用对象的写法

<div v-bind:class="['red-style', 'font-style',{'redbg':isChoosed}]"></div>

而第二种是不能改成对象的形式的。仅限于第二个结果为''的情况

动态样式绑定的知识就这么多了,大家可以尝试一下把案例修改成数组写法的形式去熟悉一下数组的写法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1977640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[NISACTF 2022]ezpie- 入土为安的第十五天

pwn的第3天 PIE保护ret2text栈 按照签到题的套路是找main&#xff0c;buf,shell,bin/sh/ 但是是PIE保护 那有什么不一样的呢 PIE保护&#xff1a; ​ PIE全称是position-independent executable&#xff0c;中文解释为地址无关可执行文件&#xff0c;该技术是一个针对代码…

C++ | (一)C++入门基础

从本篇文章开始&#xff0c;我们正式进行C的系统学习。C是在C语言的基础上添加了面向对象编程的特性&#xff0c;是C语言的延伸&#xff0c;并遵循C语言的绝大多数语法。如果想学习C&#xff0c;必须要有一定的C语言基础&#xff0c;这样学起来才不会太过痛苦。 本文章即假设读…

Vue分析脚手架结构

1.分析结构 <!DOCTYPE html> <html lang""><head><meta charset"utf-8"><!-- 针对IE浏览器 得一个特殊配置&#xff0c;含义是让IE浏览器以最高得渲染级别渲染页面 --><meta http-equiv"X-UA-Compatible" cont…

吃瓜用户看广告获取密码访问网页内容流量主模式源码

用户看广告获取密码访问网页内容&#xff0c;网站生成内容&#xff0c;用户需要浏览内容跳转至小程序&#xff0c;观看广告后获取密码&#xff0c;输入密码查看网页内容。 与之前得9.9付费进群区别就是内容体现在了网页里&#xff0c;用户不需要进群查看。并且不需要付费&…

HTML 基础结构

目录 1. 文档声明 2. 根标签 3. 头部元素 4. 主题元素 5. 注释 6. 演示 1. 文档声明 <!DOCTYPE html>&#xff1a;声明文档类型&#xff0c;表示该文档是 html 文档&#xff0c; 2. 根标签 &#xff08;1&#xff09;所有的其他标签都要放在一对根标签中&#…

MySQL精简笔记

基础类型 整型&#xff1a;bit&#xff0c;tinyint&#xff0c;smallint&#xff0c;int&#xff0c;bigint浮点&#xff1a;fload&#xff0c;double&#xff08;M&#xff1a;整数小数的位数&#xff0c;D&#xff1a;小数的位数&#xff09;无符号&#xff1a; decimal&…

C++类和对象知识巩固:相关习题解析

目录 1&#xff0c;求下面析构的顺序 2&#xff0c;以下调用了多少次拷贝构造 3&#xff0c;计算日期到天数的转换 4&#xff0c;日期差值 5&#xff0c;打印日期 6&#xff0c;累加天数 7&#xff0c;求123...n&#xff0c;要求不能使用乘除法、for、while、if、else、…

springboot2自定义starter

1.创建maven项目。首先根据springboot 约定规范&#xff0c;Starter项目的命名规范如下&#xff1a; 建议自定义的starter 以 xxx-spring-boot-starter 命名&#xff0c;官方的Starter一般都是以spring-boot-starter-为前缀。这样做的目的是为了避免与官方或其他第三方提供的St…

C#-读取测序数据的ABI文件并绘制svg格式峰图

本地环境&#xff1a;win10&#xff0c;visual studio 2022 community 目录 前言问题描述实现效果解决思路实现要点ABI文件的组织方式svg绘制问题变色碱基值 动态设置svg图像宽度 前言 本文是在已有的代码基础上进行的开发&#xff0c;前期已经实现&#xff1a; ABI文件的解析…

8090怀旧视频素材去哪里找?怀旧童年的素材库分享给你

在这个充满活力的现代社会中&#xff0c;对80和90年代的复古风情的怀旧情感愈加浓厚。那些年的音乐、电影、日常生活乃至街头巷尾的景象&#xff0c;总能唤起人们的美好回忆。对于视频创作者而言&#xff0c;制作一部带有80和90年代怀旧风格的视频&#xff0c;不仅能触动观众的…

cgroup:Linux的资源控制机制

文章目录 1 cgroup 的主要功能1.1 资源限制1.2 优先级控制1.3 资源隔离1.4 资源监控 2 cgroup 的层次结构3 cgroup 子系统4 示例&#xff1a;使用 cgroup 控制 CPU 和内存4.1 创建 cgroup4.2 设置资源限制4.3 将进程添加到 cgroup 5 使用 systemd 管理 cgroup6 总结参考链接封面…

【人工智能】NLP入门指南:自然语言处理基础全解析

文章目录 前言一、NLPNLP&#xff08;自然语言处理&#xff09;NLU&#xff08;自然语言理解&#xff09;NLG&#xff08;自然语言生成&#xff09; 二、分词1.什么是分词2.常见的分词工具3.jieba分词 三、词向量1.什么是词向量2.文本张量表示方法3.常见的词向量模型3.1 ont-ho…

QT键盘和鼠标事件

这些事件都在QWidget 中的保护成员方法中 都是虚函数在头文件中声明了 需要类外重现实现 如果头文件中声明 类外无实现就会报错 void Widget::keyPressEvent(QKeyEvent *event) {switch (event->key()) {//获取按键case Qt::Key_W://按键wqDebug()<<"按下w"…

【Linux】网络基础_4

文章目录 十、网络基础5. socket编程网络翻译服务 未完待续 十、网络基础 5. socket编程 网络翻译服务 基于UDP&#xff0c;我们实现一个简单的翻译。 我们导入之前写的代码&#xff1a; InetAddr.hpp&#xff1a; #pragma once#include <iostream> #include <sys…

2000-2022年各地级市能源消费数据(夜间灯光ArcGIS计算)

2000-2022年各地级市能源消费数据&#xff08;夜间灯光ArcGIS计算&#xff09; 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;城市、省份、年份、能源消费总量(百吨标准煤) 3、范围&#xff1a;337个地级市 4、计算方法&#xff1a; 利用ArcGIS计算各地级市的DN总和…

【python案例】基于Python 爬虫的房地产数据可视化分析设计与实现

引言 研究背景与意义 房地产行业在我国属于支柱性产业&#xff0c;在我国社会经济发展中一直扮演着重要角色。房价问题&#xff0c;尤其是大中城市的房价问题&#xff0c;一直是政府、大众和众多研究人员关注的热点。如何科学地预测房价是房价问题的研究方向之一。随着互联网…

[WUSTCTF2020]朴实无华1

打开题目 扫目录用dirsearch扫&#xff0c;为节省建议只扫常见的目录&#xff0c;配置是&#xff1a; ./dirsearch.py -e bak,zip,txt,tgz,php -u http:..... -s 3 -t 20 访问一下 根据提示&#xff0c;再访问一次 提示不在这&#xff0c;抓包看看 根据提示&#xff0c;改ge…

(免费领源码)java#springboot#mysql大学校园旧物捐赠网站 25109-计算机毕业设计项目选题推荐

摘 要 在网络信息的时代&#xff0c;众多的软件被开发出来&#xff0c;给用户带来了很大的选择余地&#xff0c;而且人们越来越追求更个性的需求。在这种时代背景下&#xff0c;企业只能以用户为导向&#xff0c;按品种分类规划&#xff0c;以产品的持续创新作为企业最重要的竞…

cocos creator绘制网格背景(基于矢量绘图)

在2D游戏开发中&#xff0c;设计2D地图的背景实现通常有以下几种方式&#xff1a; 静态背景图&#xff1a; 最简单的方式是使用静态背景图&#xff0c;即将整个背景作为一个静态图像加载到游戏中。这种方式适用于简单的游戏或者背景不需要变化的场景。 平铺背景图&#xff1a;…

Mathematica 矩阵基础操作指南

使用 Mathematica 进行矩阵操作的指南 目录 使用 Mathematica 进行矩阵操作的指南引言创建矩阵矩阵运算加法与减法 矩阵乘法矩阵转置逐元素运算 矩阵的行列式与逆行列式逆矩阵 矩阵分解LU 分解QR 分解特征值与特征向量 矩阵的可视化矩阵的热图矩阵的网格图 末 引言 最近笔者在…