当前位置: 首页 > news >正文

Chapter 14 scoped样式以及data函数

欢迎大家订阅【Vue2+Vue3】入门到实践 专栏,开启你的 Vue 学习之旅!

文章目录

  • 1 scoped样式
  • 1.1 全局样式
  • 1.2 局部样式
  • 1.3 工作原理
  • 2 data函数


1 scoped样式

1.1 全局样式

全局样式是指作用于整个应用程序的样式,不论在哪个组件中定义,都能影响到所有具有相同元素的组件。
在 Vue 中,若在组件的 <style> 标签中没有使用 scoped,则该样式会自动成为全局样式,影响到所有同样的 HTML 元素。

【示例】
BaseOne.vue

<template><div>BaseOne</div>
</template><script>
export default {}
</script><style>
/* 
默认的style样式会作用于全局 -> 全局样式
*/
div{border:3px solid blue;margin:30px;
}
</style>>

BaseTwo.vue

<template><div>BaseTwo</div>
</template><script>
export default {}
</script><style></style>

App.vue

<template><div><BaseOne></BaseOne><BaseTwo></BaseTwo></div>
</template><script>
// 在 <script> 标签内
import BaseOne from './components/BaseOne.vue';
import BaseTwo from './components/BaseTwo.vue';export default {components: {BaseOne,BaseTwo}
}
</script><style></style>

运行结果:
在这里插入图片描述
从上图可知,BaseOne.vue 中定义的全局样式不仅影响了 BaseOne 组件中的 div 元素,还影响了 BaseTwo 组件中的 div 元素

1.2 局部样式

局部样式仅适用于当前组件,避免了全局样式的污染。
在 Vue 中,通过在 <style> 标签上添加 scoped 属性,可以限制样式的作用范围,仅影响当前组件内的元素,而不会影响其他组件中的相同元素。

【示例】
修改 BaseOne.vue 的代码,为其添加 scoped 属性来限制样式的作用范围:
在这里插入图片描述
运行结果:
在这里插入图片描述
添加 scoped 后,样式将只作用于 BaseOne.vue 中的 div 元素,而不再影响 BaseTwo.vue 中的 div 元素。

1.3 工作原理

Vue 实现 scoped 样式的方式是通过给每个元素添加一个唯一的 data-v-xxxx 属性,并且在样式选择器中增加这个属性作为条件,以确保样式只作用于当前组件的元素。

【示例】
BaseOne.vue

<template><div>BaseOne<span>111</span><a href="">链接</a></div>
</template><script>
export default {}
</script><style>
/* 
默认的style样式会作用于全局 -> 全局样式
*/
div{border:3px solid blue;margin:30px;
}
</style>>

BaseTwo.vue

<template><div>BaseTwo</div>
</template><script>
export default {}
</script><style scoped>
div{border:3px solid red;margin:30px;
}
</style>

运行结果:
在这里插入图片描述
【Scoped 样式的工作机制】
1. 添加 data-v-hash 属性
Vue 会为每个组件的元素添加一个唯一的 data-v-hash 属性(例如 data-v-5f6a9d56),该属性仅在当前组件中存在。

2. 修改样式选择器
Vue 会自动将样式选择器修改为 div[data-v-5f6a9d56],样式只会作用于带有 data-v-hash 属性的元素。

3. 同一组件的 hash 值相同
Vue 会确保同一组件中的所有元素的 data-v-hash 属性相同,从而保证它们共享相同的样式。

2 data函数

在 Vue 中,组件的 data 选项必须是一个返回对象的函数,确保每个组件实例都有独立的数据对象。

为什么 data 是一个函数?
Vue 会创建一个新的组件实例时,每个组件实例都需要一份独立的 data 对象。如果 data 是一个对象而不是函数,所有组件实例将共享同一个数据对象,从而导致数据污染和不可预期的行为。

【示例】
BaseCount.vue

<template><div class="base-count"><button @click="count--">-</button><span>{{ count }}</span><button @click="count++">+</button></div>
</template><script>
export default {data: function () {return {count: 100,}},
}
</script><style>
.base-count {margin: 20px;
}
</style>

App.vue

<template><div class="app"><BaseCount></BaseCount><BaseCount></BaseCount><BaseCount></BaseCount></div>
</template><script>
import BaseCount from './components/BaseCount'
export default {components: {BaseCount,},
}
</script><style>
</style>

运行结果:
在这里插入图片描述
在 App.vue 中,创建了三个 <BaseCount> 组件实例。每次 Vue 创建新的 BaseCount 实例时,都会执行 data 函数,返回一个新的对象。
每个 BaseCount 组件都有独立的 count 数据,初始值为 100。点击某个组件的加减按钮时,只有该组件的 count 值会发生变化,而其他组件的 count 数据不受影响。

相关文章:

Chapter 14 scoped样式以及data函数

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 1 scoped样式1.1 全局样式1.2 局部样式1.3 工作原理2 data函数 1 scoped样式 1.1 全局样式 全局样式是指作用于整个应用程序的样式&#xff0c;不论在哪个组件中定义&#x…...

Golang | Leetcode Golang题解之第557题反转字符串中的单词III

题目&#xff1a; 题解&#xff1a; func reverseWords(s string) string {length : len(s)ret : []byte{}for i : 0; i < length; {start : ifor i < length && s[i] ! {i}for p : start; p < i; p {ret append(ret, s[start i - 1 - p])}for i < le…...

区块链技术在电子政务中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 引言 区块链技术概述 定义与原理 发…...

Simulink中Matlab function使用全局变量

目录 一. 引言二. 普通Matlab function使用全局变量三. Simulink中的Matlab function使用全局变量四. 如何利用Matlab function的全局变量施加随机噪声 一. 引言 最近发现了之前仿真中的一个问题&#xff0c;记录一下备忘。 Matlab function中有时候需要用到全局变量&#xf…...

WPF-控件的属性值的类型转化

控件的属性值需要转成int、double进行运算的&#xff0c;可以使用一下方法 页面代码 <StackPanel Margin"4,0,0,0" Style"{StaticResource Form-StackPanel}"> <Label Content"替换后材料增加金额&#xff…...

海思Hi3516DV300上播放G711U音频文件

在海思Hi3516DV300芯片运行Linux系统下&#xff0c;可通过如下函数来实现G711U音频文件的播放&#xff1a; int ADecPlayVoiceFile(const char* filename) {FILE* pfd;AUDIO_STREAM_S stStream;HI_S32 s32Ret,length,decLength,allLength 0,aChn 0;HI_U8 buf[SAMPLE_AUDIO_P…...

Linux源码阅读笔记-V4L2框架基础介绍

V4L2视频设备驱动基础 V4L2 是专门为 Linux 设备设计的整套视频框架&#xff08;其主要核心在 Linux 内核&#xff0c;相当于 Linux 操作系统上层的视频源捕获驱动框架&#xff09;。为上层访问系统底层的视频设备提供一个统一的标准接口。V4L2 驱动框架能够支持多种类型设备&…...

列表(list)

一、前言 本次博客主要讲解 list 容器的基本操作、常用接口做一个系统的整理&#xff0c;结合具体案例熟悉自定义内部排序方法的使用。如有任何错误&#xff0c;欢迎在评论区指出&#xff0c;我会积极改正。 二、什么是list list是C的一个序列容器&#xff0c;插入和删除元素…...

使用Python抓取数据的实战指南

引言 在当今信息爆炸的时代&#xff0c;数据已成为一种宝贵的资源。无论是学术研究、市场分析&#xff0c;还是个人兴趣&#xff0c;数据的获取都是至关重要的一步。Python&#xff0c;凭借其强大的库和简洁的语法&#xff0c;成为了数据抓取&#xff08;也称为网络爬虫或网页…...

GIC寄存器介绍

往期内容 本专栏往期内容&#xff0c;interrtupr子系统&#xff1a; 深入解析Linux内核中断管理&#xff1a;从IRQ描述符到irq domain的设计与实现Linux内核中IRQ Domain的结构、操作及映射机制详解中断描述符irq_desc成员详解Linux 内核中断描述符 (irq_desc) 的初始化与动态分…...

c++实现B树(下)

书接上回小吉讲的是B树的搭建和新增方法的实现&#xff08;blog传送门&#x1f6aa;&#xff1a;B树实现上&#xff09;&#xff08;如果有小可爱对B树还不是很了解的话&#xff0c;可以先看完上一篇blog&#xff0c;再来看小吉的这篇blog&#xff09;。那这一篇主要讲的是B树中…...

外星人入侵

学习于Python编程从入门到实践&#xff08;Eric Matthes 著&#xff09; 整体目录&#xff1a;外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站&#xff1a;Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果&#xff1a;可以上下左右移…...

【数据仓库】hbase的安装与简单操作

HBase 是一个分布式的、面向列的开源数据库&#xff0c;它支持大规模数据存储&#xff0c;并且是 Hadoop 生态系统的一部分。HBase 能够在廉价的硬件上运行&#xff0c;并提供对大量数据的随机、实时读写访问。下面是关于如何在 Linux 系统上安装 HBase 以及进行一些基本操作的…...

为什么RNN(循环神经网络)存在梯度消失和梯度爆炸?

1️⃣ 原理分析 RNN前向传播的公式为&#xff1a; x t x_t xt​是t时刻的输入 s t s_t st​是t时刻的记忆&#xff0c; s t f ( U ⋅ x t W ⋅ s t − 1 ) s_tf(U\cdot x_tW\cdot s_{t-1}) st​f(U⋅xt​W⋅st−1​)&#xff0c;f表示激活函数&#xff0c; s t − 1 s_{t-1} …...

【数据库】数据库迁移的注意事项有哪些?

数据库迁移是一个复杂且关键的过程&#xff0c;需要谨慎处理以确保数据的完整性和应用程序的正常运行。以下是一些数据库迁移时需要注意的事项&#xff1a; 1. 充分的前期准备 1.1 评估迁移需求 明确目标&#xff1a;确定迁移的具体目标&#xff0c;例如添加新字段、修改现…...

MQTT协议解析 : 物联网领域的最佳选择

1. MQTT协议概述 1.1 MQTT协议是什么 MQTT : Message Queuing Telemetry Transport 模式 : 发布 / 订阅主题优点 : 代码量小、低带宽、实时可靠应用 : 物联网、小型设备、移动应用MQTT 常用端口 : 1883 MQTT是一个网络协议&#xff0c;和HTTP类似&#xff0c;因为轻量简单&…...

pycharm中from[本地包]import文件/模块出现问题(最最最全方法!)

1.通过PYTHONPATH的方法在此处将路径添加上&#xff0c;能够让IDE访问得到。 2.通过选中目标文件所在的文件的文件夹单击右键&#xff0c;如下图所示可以看到下方的mark directory as选项中存在 存在excluded&#xff0c;选择此项可解决问题&#xff0c;如果仍有问题可以尝试其…...

MongoDB在现代Web开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 引言 MongoDB 概述 定义与原理 发展…...

Python Bokeh 数据可视化教程

Python Bokeh 数据可视化教程 引言 在数据科学和分析的过程中&#xff0c;数据可视化是一个至关重要的环节。它不仅能帮助我们更好地理解数据&#xff0c;还能在报告和展示中提升数据的可读性和吸引力。Python 作为数据科学的主要工具之一&#xff0c;提供了多种数据可视化库…...

(一)<江科大STM32>——软件环境搭建+新建工程步骤

一、软件环境搭建 &#xff08;1&#xff09;安装 Keil5 MDK 文件路径&#xff1a;江科大stm32入门教程资料/Keil5 MDK/MDK524a.EXE&#xff0c;安装即可&#xff0c;路径不能有中文。 &#xff08;2&#xff09;安装器件支持包 文件路径&#xff1a;江科大stm32入门教程资料…...

MMC模块化多电平换流器Simulink仿真模型:N=10子模块的载波移相调制与多控制策略应用

MMC模块化多电平换流器&#xff0c;MMC-HVDC直流输电系统&#xff0c;单个桥臂N10个子模块&#xff0c;采用载波移相调制 simulink仿真模型。 为了测试控制性能良好&#xff0c;在1s时&#xff0c;额定有功功率10e6增加到15e6。 子模块电压2000V&#xff0c;直流电压20KV。 定有…...

基于CasRel的微信小程序开发:智能合同关键信息抽取工具

基于CasRel的微信小程序开发&#xff1a;智能合同关键信息抽取工具 1. 引言 你有没有过这样的经历&#xff1f;面对一份几十页的合同&#xff0c;需要手动找出甲方、乙方、合同金额、签约日期、违约责任条款……一页页翻&#xff0c;一行行看&#xff0c;不仅耗时费力&#x…...

开源堡垒机Guacamole二次开发实战:SFTP与录屏功能深度优化

1. Guacamole堡垒机二次开发背景与挑战 Guacamole作为一款优秀的开源堡垒机&#xff0c;在企业远程办公和运维管理中扮演着重要角色。但在实际生产环境中&#xff0c;我们常常会遇到一些原生功能无法满足需求的情况。比如在分布式部署场景下&#xff0c;guacd服务与Java后端分离…...

Unity 实现Slot Machine两种动态停止效果的实战解析

1. 老虎机效果设计核心思路 老虎机作为经典游戏机制&#xff0c;其动态停止效果直接影响玩家的游戏体验。在Unity中实现这类效果时&#xff0c;我们需要考虑两个关键因素&#xff1a;物理真实感和心理预期管理。缓慢减速效果通过逐渐降低转速营造紧张氛围&#xff0c;而惯性回弹…...

3分钟夺回你的数字音乐资产:Unlock Music浏览器解密全攻略 [特殊字符]

3分钟夺回你的数字音乐资产&#xff1a;Unlock Music浏览器解密全攻略 &#x1f3b5; 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web…...

GitHub下载加速终极指南:3分钟让你的克隆速度提升100倍

GitHub下载加速终极指南&#xff1a;3分钟让你的克隆速度提升100倍 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 如果你经常需要…...

PyTorch 2.8镜像实战案例:内容创作团队基于Diffusers批量生成社媒短视频

PyTorch 2.8镜像实战案例&#xff1a;内容创作团队基于Diffusers批量生成社媒短视频 1. 项目背景与需求 在当今社交媒体内容爆炸式增长的时代&#xff0c;短视频创作团队面临着巨大的内容生产压力。传统视频制作流程需要经历脚本创作、拍摄、剪辑等多个环节&#xff0c;一个专…...

Maestro Studio终极指南:零代码可视化移动应用测试,5分钟上手自动化

Maestro Studio终极指南&#xff1a;零代码可视化移动应用测试&#xff0c;5分钟上手自动化 【免费下载链接】maestro Painless E2E Automation for Mobile and Web 项目地址: https://gitcode.com/GitHub_Trending/ma/maestro 还在为复杂的移动应用测试流程而烦恼吗&am…...

解放你的创造力:用TEdit打造泰拉瑞亚专属世界地图

解放你的创造力&#xff1a;用TEdit打造泰拉瑞亚专属世界地图 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets you change…...

AI与数据库融合:从经典论文到前沿实践

1. AI与数据库融合的起源与演进 数据库和人工智能这两个看似独立的领域&#xff0c;其实早在计算机科学发展的初期就已经产生了交集。上世纪70年代&#xff0c;当关系型数据库理论刚刚确立时&#xff0c;研究者们就开始探索如何让数据库系统具备一定的"智能"。当时的…...