从0开始学前端day1

script setup

在script里写一个setup的作用

  1. 自动注册子组件
  2. 属性和方法无需返回,执行完后自动更新
  3. 支持props和context

Vue 3中的props和context

props是一种用于父子组件通信的机制。父组件可以通过props向子组件传递数据,子组件则可以通过props接收来自父组件的数据。在Vue 3中,使用props的方式与Vue 2基本相同,只是在语法上做了一些改进。具体而言,定义props时可以使用新的PropTypes API来指定属性类型和默认值,也可以使用setup函数中的props选项来接收和使用props。

context是一种用于祖先和后代组件通信的机制。它允许在组件树中的任何位置创建一个共享的数据源,并将其传递给下面的所有后代组件。在Vue 3中,context主要是通过provide和inject两个API实现的。provide用于在祖先组件中注册一个共享的数据源,而inject用于在后代组件中获取该数据源。在使用context时需要注意,这种通信机制是单向的,即只能从祖先组件向后代组件传递数据,而无法反向传递。

总的来说,在Vue 3中,props和context都是非常重要的概念,它们提供了不同层级之间进行数据传递和通信的方法,有助于构建更加灵活和可维护的组件化应用程序。

Vue 3中的attrs、emit、props、slots和expose

attrs:attrs是一个特殊的属性,用于接收父组件传递给子组件的非props属性。在子组件中,可以通过$attrs访问到这些属性,并将其应用于内部元素或组件。这在需要将未知属性传递给子组件或者需要一次性传递多个属性时非常有用。

emit:emit是用于向父组件触发自定义事件的机制。通过在子组件中使用$emit方法,可以触发一个自定义事件,并将数据传递给父组件。父组件可以通过监听这些自定义事件来响应子组件的行为。

props:props是用于父子组件之间进行数据传递的机制,它定义了子组件可以接收的属性。父组件可以通过props向子组件传递数据,子组件通过props来接收和使用这些数据。在Vue 3中,可以使用新的PropTypes API来指定属性类型和默认值,也可以在setup函数中使用props选项来接收和使用props。

slots:slots是用于在组件中插入内容的机制。通过在组件模板中使用标签,可以定义插槽,并将内容插入到插槽中。父组件可以在使用子组件时,通过插槽将内容传递给子组件,并在子组件内部使用标签来展示插槽内容。

expose:expose是用于向父组件暴露内部方法或属性的机制。通过在setup函数中使用expose函数,可以将某些内部方法或属性暴露给父组件使用。这样可以提供一些对外的接口,以便父组件能够访问和操作子组件的内部状态或方法。

综上所述,attrs、emit、props、slots和expose都是Vue 3中与组件相关的重要概念,它们提供了灵活的数据传递、事件通信和内容插入机制,使得组件化开发更加方便和可扩展。

理解父子组件

参考链接

//Father.vue
<template>
  <div >
    <h2 >我是父组件!</h2>
    <Child msg="hello" @child-click="childCtx" />
  </div>
</template>

<script>
import { defineComponent, ref } from 'vue';
import Child from './Child.vue';

export default defineComponent({
  components: {
    Child
  },
  setup(props, context) {
    const childCtx = (ctx) => {
      console.log(ctx);
    }

    return {
      childCtx
    }
  }
})
</script>


//Child.vue
<template>
  <span @click="handleClick">我是子组件! -- msg: {{ props.msg }}</span>
</template>

<script>
import { defineComponent, ref } from 'vue'

export default defineComponent({
  emits: [
    'child-click'
  ],
  props: {
    msg: String
  },
  setup(props, context) {
    const handleClick = () => {
      context.emit('child-click', context)
    }

    return {
      props,
      handleClick
    }
  },
})
</script>

在Vue中,

具体而言,使用scoped属性后,Vue会自动将CSS样式加上唯一的作用域选择器,以确保样式只在当前组件中生效
在这里插入图片描述
在这里插入图片描述
用了scoped不能出现嵌套。改成lang=“scss”就可以了
在这里插入图片描述

多了一层template

在这里插入图片描述
运行啥也不显示
在这里插入图片描述
去掉就好了
在这里插入图片描述在这里插入图片描述

100vh - 60px

是一个简单的数学计算,表示屏幕的高度减去60像素。

padding

在CSS中,padding用于设置元素的内边距,即元素内容与边框之间的空间。

padding属性可以设置一个值来统一为四个方向的内边距,也可以分别设置每个方向的内边距。以下是使用padding属性的示例:

.element {
  padding: 10px;  /* 四个方向的内边距都为10像素 */
}

你还可以使用缩写形式来分别设置每个方向的内边距。顺序为上、右、下、左(顺时针)。例如:

.element {
  padding: 10px 20px 30px 40px;  /* 上边距为10px,右边距为20px,下边距为30px,左边距为40px */
}

如果只提供两个值,则第一个值表示上下边距,第二个值表示左右边距。例如:

.element {
  padding: 10px 20px;  /* 上下边距为10px,左右边距为20px */
}

如果只提供一个值,则四个方向的内边距都相等。例如:

.element {
  padding: 10px;  /* 四个方向的内边距都为10px */
}

你还可以使用padding-toppadding-rightpadding-bottompadding-left属性来单独设置每个方向的内边距。例如:

.element {
  padding-top: 10px;
  padding-right: 20px;
  padding-bottom: 30px;
  padding-left: 40px;
}

这些属性允许你以像素、百分比或其他CSS单位来指定内边距的大小。

通过设置padding属性,你可以调整元素的内边距,从而控制元素的布局和外观。
在这里插入图片描述
在这里插入图片描述

<style lang="scss">
.layout{
  .header{
    border-bottom: 1px solid #ddd;
  }
  .container{
    padding: 10px;
    background: #f0f0f0;
    height:calc(100vh - 60px);
    .left-aside{
       padding:15px;
       width: 300px;
      .post-btn{
        background: rgb(5, 116, 219);
        color:#fff;
        height: 40px;
        width:100%
      }
    }
    .right-main{
       
       background: #ffffff;
      
    }
  }
}
</style>

Vue中使用v-for指令

在Vue中,使用v-for指令迭代渲染元素时,每个被迭代的元素都需要添加一个key属性。这个key属性用于帮助Vue跟踪每个元素的身份,以便在更新DOM时能够更高效地确定元素的变化。

当你在迭代渲染元素时,如果没有为每个元素添加key属性,Vue会发出警告并建议你添加它们。所以你看到的错误信息 “Elements in iteration expect to have ‘v-bind:key’ directives.” 意味着你在使用v-for指令时没有为迭代的元素设置key属性。

为了解决这个问题,你可以在使用v-for指令时添加一个key属性,这个属性的值可以是唯一的标识符,例如元素在列表中的索引或唯一ID。以下是一个示例:

<template>
  <ul>
    <li v-for="item in items" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ]
    };
  }
}
</script>

在上面的示例中,v-for指令用于迭代渲染items数组中的每个元素,并为每个元素设置了key属性,这里使用了item.id作为key的值。

通过为迭代的元素添加key属性,你可以解决警告问题,并帮助Vue更好地管理元素的变化。请确保key的值在迭代范围内是唯一的,这样可以最大程度减少DOM更新的开销。

修改列表样式

ul,
 li{
  padding: 0px;
  margin: 0px;
  list-style: none;
 }

这段CSS代码是用于设置ulli元素的样式,并去除默认的列表样式。

padding: 0px;表示将内边距设为0,这样可以将元素内容与边框之间的距离设置为0。

margin: 0px;表示将外边距设为0,这样可以消除元素与其他元素之间的空间,从而让元素更加紧凑。

list-style: none;表示去除默认的列表样式,例如圆点或序号等。这样可以使列表更加简洁,同时也可以避免在一些情况下出现样式上的干扰。

总体来说,这段CSS代码是一个常见的列表重置样式,它可以让列表在不同的浏览器、设备上都保持一致的样式表现,提高页面的可靠性和可维护性。

:class="[‘iconfont’,menu.icon]

这段代码是使用Vue中的动态绑定语法(前面一定要加冒号),将一个数组作为class属性的值进行绑定。数组中的每个元素都会被解析为一个类名,并根据对应的表达式计算结果来决定是否添加该类名。

具体来说,['iconfont', menu.icon]是一个数组,其中包含两个元素:'iconfont’和menu.icon。这里的iconfont是一个静态类名,而menu.icon是一个动态的类名,它的值可能是根据menu对象中的某个属性动态计算得到。

当Vue渲染这段代码时,它会根据menu.icon的值来判断是否添加该类名。如果menu.icon的值存在,那么它会被添加为一个类名;如果menu.icon的值不存在或为空,那么它不会被添加为一个类名。

例如,如果menu.icon的值为'home',则最终渲染出来的class属性值为'iconfont home',表示同时拥有iconfonthome两个类名。

这种方式可以根据数据的变化动态地为元素添加或删除类名,从而实现灵活的样式控制。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android : 画布绘制矩形和文字 让其居中显示简单应用

示例图&#xff1a; CenterView.java package com.example.demo;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.Log; import android.view.View;public class Center…

大数据Doris(四十二):使用物化视图

文章目录 使用物化视图 一、​​​​​​​创建物化视图

听GPT 讲Rust源代码--src/tools(29)

File: rust/src/tools/clippy/clippy_lints/src/unused_peekable.rs 在Rust源代码中&#xff0c;rust/src/tools/clippy/clippy_lints/src/unused_peekable.rs这个文件是Clippy工具中一个特定的Lint规则的实现文件&#xff0c;用于检测未使用的Peekable迭代器。 Peekable迭代器…

Bind for 0.0.0.0:2379 failed: port is already allocated

1、执行命令docker-compose -p docker-apisix up -d 报错 Error response from daemon: driver failed programming external connectivity on endpoint docker-apisix-etcd-1 (2a92a0cefff9194fcd1dad4bdeabf4201d9047ec2633eda455c6e46528668af4): Bind for 0.0.0.0:2379 fa…

Pandas教程(三)—— 数据清洗与准备

1.处理缺失值 1.1 数据删除函数 作用&#xff1a;删除Dataframe某行或某列的数据 语法&#xff1a;df.drop&#xff08; labels [ ] &#xff09; drop函数的几个参数&#xff1a; labels &#xff1a;接收一个列表&#xff0c;内含删除行 / 列的索引编号或索引名 axis &…

用友薪福社解决社会化用工难题,助力企业走上“降本增效”之路

“就业”一直是人们关注的重点。用人需求与求职人数环比均明显上升&#xff0c;人力资源市场活跃度也明显增强&#xff0c;但供求关系整体仍旧偏紧。在行业快速发展的前提下&#xff0c;如何快速缓解企业用工荒难题&#xff0c;成为当前诸多企业面临的困境。为了科学合规地降低…

金融贷款行业怎么精准获客,电销打吐了!教你两招

助贷行业&#xff0c;一般都会设有kpi&#xff0c;压力竞争都不小。虽然现在贷款电销大家对此意见不同&#xff0c;但是&#xff0c;不可否认&#xff0c;这个行业&#xff0c;电销就是它们最快速的获客方式。只要耐得住性子&#xff0c;有一份精准的话单&#xff0c;就可以开工…

二叉树数据结构:深入了解二叉树的概念、特性与结构

在探索栈和队列之后&#xff08;大家可以移步至我的数据结构专栏&#xff09;&#xff1a;T-rLN的数据结构专栏 我们转向了更为复杂而有趣的数据结构——二叉树。本文将引领我们进入二叉树的世界&#xff0c;从最基本的概念和结构开始&#xff0c;逐步深入了解二叉树的顺序结构…

Postman使用

Postman使用 Pre-request Script 参考&#xff1a; Scripting in Postman 可以请求、集合或文件夹中添加Pre-request Script&#xff0c;在请求运行之前执行JavaScript 如设置变量值、参数、Header和正文数据&#xff0c;也可以使用Pre-request Script来调试代码&#xff0…

解决Hive在DataGrip 中注释乱码问题

注释属于元数据的一部分&#xff0c;同样存储在mysql的metastore库中&#xff0c;如果metastore库的字符集不支持中文&#xff0c;就会导致中文显示乱码。 不建议修改Hive元数据库的编码&#xff0c;此处我们在metastore中找存储注释的表&#xff0c;找到表中存储注释的字段&a…

【汇编笔记】初识汇编-内存读写

汇编语言的由来&#xff1a; CPU是计算机的核心&#xff0c;由于计算机只认识二进制&#xff0c;所以CPU执行的指令是二进制。 我们要想让CPU工作&#xff0c;就得给他提供它认识的指令&#xff0c;这一系列的指令的集合&#xff0c;称之为指令集。 指令集&#xff1a; 不同的体…

VR全景图片制作时有哪些技巧,VR全景图片能带来哪些好处

引言&#xff1a; VR全景图片是通过虚拟现实技术制作出的具有沉浸感的图片&#xff0c;能够提供给用户一种身临其境的感觉。在宣传方面&#xff0c;它有着独特的优势和潜力&#xff0c;能够帮助吸引更多的潜在客户&#xff0c;那么VR全景图片制作时有哪些技巧&#xff0c;VR全…

【科普】家长们:如何早期发现孩子的听力问题?

孩子太小还不会说话&#xff0c; 或表达不准确&#xff0c; 家长往往很难发现他们听力下降&#xff1b; 那在生活中 如何发现孩子听力异常呢&#xff1f; 1、新生儿听力筛查 每一个新生儿出生后都要求做听力筛查&#xff0c;这样可以及早判断是否存在听力障碍的可能&#…

【Java 进阶篇】Jedis 操作 Set 与 SortedSet 详解

Redis 是一个强大的键值存储系统&#xff0c;而 Jedis 是 Redis 的 Java 客户端&#xff0c;为 Java 开发者提供了方便的操作接口。在这篇博客中&#xff0c;我们将深入探讨 Jedis 如何操作 Redis 中的 Set 和 SortedSet 数据结构。无论你是初学者还是有一些经验的开发者&#…

javaEE -18(11000字 JavaScript入门 - 3)

一&#xff1a;事件 &#xff08;高级&#xff09; 1.1 注册事件&#xff08;绑定事件&#xff09; 给元素添加事件&#xff0c;称为注册事件或者绑定事件&#xff0c;注册事件有两种方式&#xff1a;传统方式和方法监听注册方式 传统注册方式 &#xff1a; 利用 on 开头的…

dvwa问题篇 -- dvwa出现数据库无法访问的时候,Could not connect to the MySQL service. -- 小黑解决教程

各位小伙伴初次玩dvwa会出现各种问题&#xff0c;本来想把一些问题直接总结写一篇dvwa文章来着&#xff0c;但因为都是关键字搜索&#xff0c;所以将一些问题都拆分出来&#xff0c;以便大家方便查类似问题。&#xff08;大家有遇到不一样的问题欢迎投稿&#xff01;&#xff0…

windows使用docker运行主从数据库,io线程一直在connect

1需求&#xff1a; 实现mysql数据库主从同步 分析&#xff1a;实现主从同步需要两个数据库&#xff0c;这两个数据库一般放在不同的机器上&#xff08;服务器上/个人PC上&#xff09;&#xff0c;我自己只有一个PC&#xff0c;也没有购买个人服务器&#xff0c;所以需要使用虚…

【辐射场】3D Gaussian Splatting

三维高斯…喷喷 \, 3D Gaussian Splatting&#xff0c;下文简称3DGS&#xff0c;是好一段时间以来在三维内容创作和三维重建领域比较有热度的一项技术。 它属于基于图像的三维重建方法&#xff0c;意思就是你对现实物体或者场景拍照片&#xff0c;就能给你训练成一个场景模型&a…

泛型的使用

泛型 泛型的概念 Java泛型是一种在编译时期进行类型检查和类型安全的机制&#xff0c;它可以让我们在编写代码时指定参数或返回值的类型&#xff0c;从而提高代码的可读性和可维护性。 孩童的智商可能还不足以理解泛型的具体概念和实现细节&#xff0c;但是我们可以通过类比…

unity exe程序置顶和全屏

1.置顶和无边框 设置显示位置和范围 using System; using System.Runtime.InteropServices; using UnityEngine; public class WindowMod : MonoBehaviour {public enum appStyle{FullScreen,WindowedFullScreen,Windowed,WindowedWithoutBorder}public enum zDepth{Normal…