vue 入门二

news2024/11/19 22:33:25

参考:丁丁的哔哩哔哩

11.组件基础

  • 传递 props
    1.父组件
<BlogPost title="My journey with Vue" />
    子组件
<script setup>
defineProps(['title'])
</script>

<template>
  <h4>{{ title }}</h4>
</template>
	2.props第二种声明方式
 对于以对象形式声明的每个属性,key 是 prop 的名称,而值则是该 prop 预期类型的构造函数。
 比如,如果要求一个 prop 的值是 number 类型,则可使用 Number 构造函数作为其声明的值
// 使用 <script setup>
defineProps({
  title: String,
  likes: Number
})

如果你正在搭配 TypeScript 使用 <script setup>,也可以使用类型标注来声明 props:

<script setup lang="ts">
defineProps<{
  title?: string
  likes?: number
}>()
</script>
属性还可以是对象的形式
// 使用 <script setup>
defineProps({
  title: {
    type: String,
    default: "你好",
    required: true
  },
  list: {
	type: Array,
	default(){ // 对象或数组的默认值必须从一个工厂函数返回
		return [];
	}
	}
})
  • 单向数据流

    props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递

  • 子组件向父组件传递数据

    $emit自定义触发事件

<script setup>
defineProps(['title'])
defineEmits(['enlarge-text'])
</script>
  • 父子组件的访问方式

    1.父组件访问子组件:$refs
    ref:用来给元素或子组件注册引用信息

<p ref="p" ></p>
console.log($refs) // 获取到p元素的各种属性
	2.子组件访问父组件:`$parent` 不建议使用,因为子组件的复用性很高
	3.子组件访问根组件:`$root`
  • 通过插槽来分配内容
<!-- AlertBox.vue -->
<template>
  <div class="alert-box">
    <strong>This is an Error for Demo Purposes</strong>
    <slot />
  </div>
</template>

<style scoped>
.alert-box {
  /* ... */
}
</style>
<AlertBox>
  Something bad happened.
</AlertBox>

Something bad happened.将会被放到<slot />

12.插槽

  • 具名插槽
    给插槽定义名字
<div class="container">
   <slot name="header"></slot>
   <slot></slot>
   <slot name="footer"></slot>
</div>

使用<template v-slot:header>来插入插槽内容

<BaseLayout>
  <template v-slot:header>
    <!-- header 插槽的内容放这里 -->
  </template>
</BaseLayout>
  • 渲染作用域
    插槽内容无法访问子组件的数据。Vue 模板中的表达式只能访问其定义时所处的作用域
    父组件模板中的表达式只能访问父组件的作用域;子组件模板中的表达式只能访问子组件的作用域。
  • 默认内容
<button type="submit">
  <slot>
    Submit <!-- 默认内容 -->
  </slot>
</button>
  • 作用域插槽
    插槽的内容访问到子组件的状态。
    1 在子组件传参
<!-- <MyComponent> 的模板 -->
<div>
  <slot :text="greetingMessage" :count="1"></slot>
</div>

2 在父组件使用 v-slot=slotProps 获取参数

<MyComponent v-slot="slotProps">
  {{ slotProps.text }} {{ slotProps.count }}
</MyComponent>
  • 具名作用域插槽
    同时使用了具名插槽与默认插槽,则需要为默认插槽使用显式的 <template> 标签
<!-- <MyComponent> template -->
<div>
  <slot :message="hello"></slot>
  <slot name="footer" />
</div>
<MyComponent>
  <!-- 使用显式的默认插槽 -->
  <template #default="{ message }"> // 使用解构
    <p>{{ message }}</p>
  </template>

  <template #footer>
    <p>Here's some contact info</p>
  </template>
</MyComponent>

13.依赖注入

在这里插入图片描述

  • Provide (提供)

要为组件后代提供数据,需要使用到 provide() 函数。
第一个参数被称为注入名,可以是一个字符串或是一个 Symbol。第二个参数是提供的值,值可以是任意类型,包括响应式的状态。

<script setup>
import { provide } from 'vue'

provide(/* 注入名 */ 'message', /* 值 */ 'hello!')
</script>

一个组件可以多次调用 provide(),使用不同的注入名,注入不同的依赖值。

  • 应用层 Provide
    编写插件时会特别有用
import { createApp } from 'vue'

const app = createApp({})

app.provide(/* 注入名 */ 'message', /* 值 */ 'hello!')
  • Inject (注入)
    如果提供的值是一个 ref,注入进来的会是该 ref 对象,而不会自动解包为其内部的值
<script setup>
import { inject } from 'vue'

const message = inject('message')
</script>
  • 和响应式数据配合使用
    当提供 / 注入响应式的数据时,建议尽可能将任何对响应式状态的变更都保持在供给方组件中。

生命周期钩子

在这里插入图片描述

vue3组合式API

组合式API,将同一个逻辑关注点相关代码收集到一起

export default {
	setup(){
	// 组件被创建之前执行,所以不需要引用this,this不会指向实例
	const msg = "hello";
	console.log(msg);
	},
	beforeCreated(){ 
		console.log("beforeCreated") 
	},
	created(){ 
		console.log("created") 
	}
}

setup函数会在beforeCreated和created之前执行,写在beforeCreated和created中的也可以写在setup函数中!

  • setup函数—响应式变量使用
export default {
	setup(){
	// "hello" 被包裹在了对象的value属性中,使用时需要.value引用
	const msg = ref("hello"); 
	console.log(msg);
	function changeMsg(){
		msg.value="你好";
	}

	// 定义响应式引用类型的数据
	const obj = reactive({
		name:"james",
		age:18
	})
	function changeName(){
		obj.name="curry"
	}
	// toRefs(object)使解构后的数据重新获得响应式
	// 通过ES6扩展运算符进行结构使得对象中的属性不是响应式的
	// ...toRefs(obj)可以获得响应式
	return { msg, changeMsg, ...obj }
	},
}

将值封装在一个对象中,看似没有必要,但为了保持 JavaScript 中不同数据类型的行为统一,这是必须的。这是因为在 JavaScript中,Number或 string等基本类型是通过值而非引用传递的。包裹在对象中,value属性值变化,就会响应式更新?

  • setup函数—watch
 const user = reactive({
 	 username:"张三",
 	 age: 18
 })

watch(user.age)这种形式监视不了age属性。
可以用watchEffect。

// watchEffect(回调函数)注意不需要指定监听的属性,组件初始化的时候会执行一次回调函数,自动收集依赖
watchEffect( ()=>{
	console.log(user.age)
	}
) 

watchEffect、watch的区别:

  1. watchEffect不需要指定监听的属性,自动收集依赖,只要在回调中引用到了响应式的属性,只要这些属性发生改变,回调就会执行;watch只能侦听指定的属性,做出回调函数的执行,可以侦听多个,vue3开始后
  2. watch可以获取到新值和旧值,watcheffect拿不到
  3. watchEffect在组件初始化的时候就会自动执行一次,用来收集依赖,watch不需要,一开始就指定了
  • setup函数—参数(props, context)
    在使用 <script setup> 的单文件组件中,props 可以使用 defineProps() 宏来声明:
<script setup>
const props = defineProps(['foo'])

console.log(props.foo)
</script>
 export default{
	props:{
		title: String
	}
	setup(props){
		console.log(props.title)
	}
}

context参数
在这里插入图片描述

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

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

相关文章

【springboot9736】基于springboot+vue的逍遥大药房管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 伴随着全球信息化发展&#xff0c;行行业业都与计算机技…

10月9日

没看清x的范围

前端vue-配置请求拦截器

1.配置拦截器&#xff0c;记得20行的导出 2.响应拦截器&#xff0c;记得28行的导出 3.拦截器不止可以拦截&#xff0c;还可以添加内容

KaTeX.js渲染数学公式

什么是KaTeX.js ? KaTeX 是一个集成速度快且功能丰富的数学公式渲染库&#xff0c;专为 Web 设计。它由 Khan Academy 开发&#xff0c;提供接近印刷品质的数学公式展示&#xff0c;同时保持与浏览器的高效互动性。KaTeX 特点包括快速渲染速度、高质量的输出、独立运行、跨平…

IP-guard与Ping32功能对比:谁更适合你的企业?

在当今数字化时代&#xff0c;数据泄露已成为企业面临的一大挑战。为了保障信息安全&#xff0c;众多企业选择部署数据防泄漏&#xff08;DLP&#xff09;软件。IP-guard和Ping32作为市场上备受瞩目的两款产品&#xff0c;各自具有独特的功能和优势。那么&#xff0c;哪款软件更…

阿里云 CDN如何缓解ddos攻击

在网络安全日益重要的今天&#xff0c;DDoS攻击已成为企业面临的主要威胁之一。阿里云CDN&#xff08;内容分发网络&#xff09;以其强大的防护能力&#xff0c;成为抵御DDoS攻击的利器。九河云来和大家聊聊阿里云 CDN是如何缓解ddos攻击的吧。 首先&#xff0c;阿里云CDN通过…

CentOS7.9 下安装 Docker

第一步&#xff1a; sudo yum install -y yum-utils \ > device-mapper-persistent-data \ > lvm2 第二步&#xff1a;安装 sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum -y install…

旧衣回收小程序开发:开启线上旧衣回收新时代

近几年&#xff0c;旧衣回收这种新的理念在市场中兴起&#xff0c;并快速得到了发展&#xff0c;让大众闲置的衣物得到了归处&#xff0c;减少了资源浪费&#xff0c;深受大众的关注。 在科技的创新下&#xff0c;旧衣回收迎来了新的发展方式---旧衣回收小程序&#xff0c;以信…

Hugging face简要介绍

1.注册使用huggingface 2.在Datasets下可以查看数据集 3.在Models下可以查看模型&#xff0c;左侧是对模型的分类 4.官方文档查看https://huggingface.co/docs 5.主要模型&#xff1a; 自回归&#xff1a;GPT、Transformer-XL、XLNet 自编码&#xff1a;BERT、ALBERT、RoBERT…

JDK17安装教程

1.双击安装包 2.配置环境变量&#xff08;可选&#xff09;注意&#xff1a;JDK下载路径默认选择C盘 右键点击此电脑选择属性&#xff08;找到高级系统设置&#xff09; 点击环境变量 在系统变量中新建两个新的变量&#xff1a;CLASSPATH和JAVA_HOME CLASSPATH内容值为&…

10.9今日错题解析(软考)

目录 前言系统开发基础——耦合性I/O设备 前言 这是用来记录我备考软考设计师的错题的&#xff0c;今天知识点为耦合性、I/O设备&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xff0c;有自己的思考&#xff0c;为了复习&#xff1a;&#xff09;&a…

嵌入式C语言自我修养:ARM体系结构与汇编语言

ARM体系结构 ⭐ 关联知识点&#xff1a;指令集 计算机的指令集一般可分为4种&#xff1a;复杂指令集(CISC)、精简指令集(RISC) 、显式并行指令集 (EPIC)和超长 指 令 字 指 令 集(VLIW)。嵌入式用的是RISC指令集&#xff0c;RISC指令集相对于CISC指令集&#xff0c;主要有以下…

Ubuntu 22.04 安装 KVM

首先检查是否支持 CPU 虚拟化&#xff0c;现在的 CPU 都应该支持&#xff0c;运行下面的命令&#xff0c;大于0 就是支持。 egrep -c (vmx|svm) /proc/cpuinfo安装 Libvirt apt install -y qemu-kvm virt-manager libvirt-daemon-system virtinst libvirt-clients bridge-uti…

海外企业如何在中国市场“站稳脚跟”?

嘿&#xff0c;企业主们&#xff01;你是否也对中国市场这块诱人的“大蛋糕”心生向往&#xff0c;却又因为种种挑战而犹豫不决&#xff1f;别担心&#xff0c;NetFarmer正是你寻找的那位可靠且充满智慧的探险伙伴。无论是新加坡的企业&#xff0c;还是其他国家的中小企业&…

平凯星辰亮相 2024开放原子开源生态大会,分享开源教育及社区治理经验

9 月 25-27 日&#xff0c;2024 开放原子开源生态大会在北京成功举办&#xff0c;本次大会以“开源赋能产业&#xff0c;生态共筑未来”为主题&#xff0c;由开放原子开源基金会主办&#xff0c;聚焦地方开源实践、企业开源建设思路&#xff0c;围绕开源生态建设&#xff0c;突…

数据校验的总结

业务层进行复杂检查 简单校验交给Controller校验&#xff0c;能流到业务的层的数据就是基本合法 引入依赖&#xff1a;spring-boot-starter-validation 能标注的所有注解在这两个地方看 jakarta.validation.constraints、 org.hibernate.validator.constraints 使用步骤…

Leecode热题100-56.合并区间

以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;intervals [[1,3…

如何获取 uni-app 应用发布所需的证书、私钥与配置文件

引言 在开发和发布iOS应用时&#xff0c;开发者常常会面临一系列复杂的证书、私钥密码以及配置文件的管理问题。这些配置不仅影响到应用的开发调试&#xff0c;还决定了应用是否能够顺利通过审核并发布到App Store。对于使用uni-app进行开发的开发者来说&#xff0c;自动生成的…

IPguard与Ping32:安全性、易用性与稳定性全面对比

在当今这个数据驱动的时代&#xff0c;信息安全已成为企业运营的核心要素。随着网络攻击手段的不断升级&#xff0c;如何确保企业数据的安全、易用与稳定&#xff0c;成为了众多企业关注的焦点。IPguard与Ping32作为两款备受瞩目的防泄密软件&#xff0c;各自以其卓越的性能和独…

VBA高级应用30例应用3Excel中的ListObject对象:选择表的一部分

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…