一文玩转Vue3参数传递——全栈开发之路--前端篇(8)

全栈开发一条龙——前端篇
第一篇:框架确定、ide设置与项目创建
第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。
第三篇:setup语法,设置响应式数据。
第四篇:数据绑定、计算属性和watch监视
第五篇 : 组件间通信及知识补充
第六篇:生命周期和自定义hooks
第七篇:路由

本文将详细讲述Vue3的种种参数传递,是做项目中必须熟练掌握的技能。

文章目录

  • 一、有限(定向)组件传递参数
    • 1.props父子组件传参
    • 2.自定义事件
    • 3. attrs
    • 4. provide/inject 0打扰实现祖孙通信
  • 二、任意组件通信
    • 1、mitt(Vue3不推荐)
      • 1.建立emitter
      • 2.emitter操作事件
      • 3.例子
    • 2.pinia(重要)
      • 1)引入pinia
      • 2)存储和读取
        • 1.count.ts
        • 2.count.vue
        • 3.getters
        • 4.subscribe
      • 3)pinia的组合式写法

一、有限(定向)组件传递参数

1.props父子组件传参

父–>子组件在调用子组件直接附上props传参即可。此处为了说接口已经提前讲过了,详细的可以看props传参参考

子–>父:这就麻烦一点,我们要先让父亲传一个获取变量的函数给子,子接收这个方法,然后子调用这个方法传入参数,这样父就能收到。

2.自定义事件

子–>父
haha是事件名(自定义事件),xyz是调用函数,左边为父组件,右边为子组件。
在父组件中先给子组件定义一个自定义事件haha,给他绑定上xyz方法。接下来,我们要编写haha的触发方法:在子组件中先用defineEmits接收haha,之后我们调用emit('haha')就可以触发事件,haha后可以附上函数,左边父组件的xyz方法就可以收到。
在这里插入图片描述

emit('haha')可以在任何地方调用,比如我想要子组件挂载3秒后触发,我就按照下面的写法 :

3. attrs

祖–>孙

观察这两页代码,上面的图片为祖父组件,下面的为父亲组件,祖父组件传递了abcdxy,但父亲一个都没接收。虽然儿子没接收,但祖父只要传递了,数据就一定存在,就存放在attrs这个属性中(如果父亲接收了a,那祖父传下来的attrs里就只有bcdxy了,即attrs里是祖父传了但父亲没用的东西
儿子将attrs给孙子之后,孙子就可以直接用了

最后就实现了祖孙的信息传输。

孙–>祖
很简单,跟自定义方法类似,祖父将方法传下来,孙子接收到之后调用即可。

4. provide/inject 0打扰实现祖孙通信


provide可以向所有晚辈传数据(包括子、孙、曾孙等等)

使用了provide之后,任意晚辈可以用inject调用

这完全不需要中间(比如祖孙之间有其他父子关系的组件)操作,直接在孙子处调用即可,实现0打扰。
inject的第二个属性是默认值,如果没收到就需要加默认值 inject('money',666)

反向传输又是经典的用函数传


通过传递函数,可以实现反向数据传输。

二、任意组件通信

1、mitt(Vue3不推荐)

1.建立emitter

先在src下建立utils文件夹,创建emitter文件

在其中调用mitt

然后打开main.ts引入emitter

2.emitter操作事件

emitter.on 是绑定事件,emitter.emit('方法名')是调用事件

以上代码可以实现每一秒调用依次test1和test2,setInterval是周期调用。在console栏里我们能看到

emitter.off是接触绑定

我们写一个定时器,3秒之后解绑test1,就会出现下图这样,一开始周期调用test1和2,在三秒之后只调用2了。

同时解绑多个(清空函数): emitter.all.clear()就可以将方法一键解绑。

3.例子


事实上,emit就相当于第三方写好的一个自定义方法的Api,各个模式都很像,差别是emit可以实现拥有emitter的组件都能通信。
注:别忘了释放emitter建立的通信

2.pinia(重要)

1)引入pinia

现在终端中输入npm i pinia,然后重启Vscode
打开main.ts文件,然后引入pinia并创建

import { createPinia } from 'pinia'
const pinia = createPinia()

然后把pinia安装到我们的app上

app.use(pinia)

最后代码如图:

2)存储和读取

我们先随便写两个组件,我这里写了一个加和组件(count)和获取边牧图片组件(dog)。接下来,我们要将数据共享。

我们在src目录下建立 store文件夹,在其中建立count.ts(尽量与组件同名,方便你后期理解,但不强制)

1.count.ts
import { defineStore } from "pinia"export const useCountStore = defineStore('count',{//state真正存储数据state(){return {sum:0}}
})

此处第一个参数为组件名,我们写count组件,第二个参数要求是一个函数,里面的返回值就是我们的数据。

2.count.vue
 import { useCountStore } from '@/store/count';const countStore = useCountStore()

在组件中,先引入我们刚刚写的,然后调用。之后我们就可以countStore.sum来读取修改它。

 <h2>和为:{{ countStore.sum}}</h2>
      function add(){countStore.sum += n.value}

与之前效果一致。
如果变量太多,可以用对象修改,数量不多直接按照.xx操作即可

第三种,如果你要把判断逻辑放在其他组件,让页面看上去干净的话,可以用函数修改。action与state同级。

action里还可以写其他函数,就理解为类函数就可以了。

3.getters

与action和state同级,我们还可以写getters,相当于计算属性

比如这样,就是把state当作参数收集过来,然后返回其中的sum属性*10,这样你就可以调用获得这个bigsum,与常用变量一样。当然,你也可以直接用this.sum,跟类私有变量其实差不多。
比如这样

如果遇到飘红,就加上这个:类型。

4.subscribe

pinia中的订阅函数的作用等同watch

mutate是本次修改的信息,state是数据,用state.xx就可以调用。

3)pinia的组合式写法


我们可以将第二个参数当作setup,然后按照组合式API的写法去写,这是最常用的。用法与之前完全一致,只有这个存储hooks的写法不一样。

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

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

相关文章

电脑桌面定时提醒软件 有定时提醒功能的软件有哪些

对于很多上班族来说&#xff0c;在电脑、手机上使用一款定时提醒软件&#xff0c;是非常有必要的。一款定时提醒软件能让我们对即将进行的工作一目了然&#xff0c;防止遗漏或错过重要事务。其次&#xff0c;通过设定提醒&#xff0c;我们可以更好地安排自己的时间&#xff0c;…

基于springboot实现医院药品管理系统项目【项目源码+论文说明】

基于springboot实现医院药品管理系统演示 摘要 身处网络时代&#xff0c;随着网络系统体系发展的不断成熟和完善&#xff0c;人们的生活也随之发生了很大的变化&#xff0c;人们在追求较高物质生活的同时&#xff0c;也在想着如何使自身的精神内涵得到提升&#xff0c;而读书就…

社交媒体数据恢复:新浪微博

当我们在使用新浪微博时&#xff0c;可能会遇到一些意外情况&#xff0c;如误删微博、账号出现问题等。这时&#xff0c;我们需要进行数据恢复。本文将详细介绍如何在新浪微博中进行数据恢复。 首先&#xff0c;我们需要了解新浪微博的数据恢复功能。根据微博的帮助中心&#…

Android11 InputManagerService启动流程分析

InputManagerService在systemserver进程中被启动 //frameworks\base\services\java\com\android\server\SystemServer.java t.traceBegin("StartInputManagerService"); inputManager new InputManagerService(context);//1 t.traceEnd(); //省略 //注册服务 Servi…

socket实现TCP UDP

1、socket通信建立流程 1.1、创建服务端流程 使用 socket 函数来创建 socket服务。 使用 bind 函数绑定端口。 使用 listen 函数监听端口。 使用 accept 函数接收客户端请求。 1.2、创建客户端流程 使用 socket 函数来创建 socket 服务。 使用 connect 函数连接到 socke…

基于springboot+jsp+Mysql的商务安全邮箱邮件收发

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【强训笔记】day16

NO.1 代码实现&#xff1a; class StringFormat { public:string formatString(string A, int n, vector<char> arg, int m) {string ret;int j0;for(int i0;i<n;i){if(A[i]%){if(i1<n&&A[i1]s){retarg[j];i;}else {retA[i];}}else {retA[i];}}while(j&l…

设计模式之拦截过滤器模式

想象一下&#xff0c;在你的Java应用里&#xff0c;每个请求就像一场冒险旅程&#xff0c;途中需要经过层层安检和特殊处理。这时候&#xff0c;拦截过滤器模式就化身为你最可靠的特工团队&#xff0c;悄无声息地为每一个请求保驾护航&#xff0c;确保它们安全、高效地到达目的…

小白必看:数据防泄密软件介绍|安在云和Ping32对比?

在当今数字化时代&#xff0c;数据防泄密软件已经成为企业和组织不可或缺的重要工具。随着信息技术的发展&#xff0c;企业面临着越来越多的网络安全威胁&#xff0c;数据泄露事件也屡见不鲜。数据防泄密软件的出现&#xff0c;为企业提供了有效的解决方案。 一、数据防泄密软…

wlan二层旁挂组网实验

实验拓扑图 代码&#xff1a; SW1 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysn sw1 [sw1]undo info-center enable Info: Information center is disabled. [sw1]vlan batch 10 20 30 Info: This operation may take a few seconds. …

Linux网络——自定义序列化与反序列化

前言 之前我们学习过socket之tcp通信&#xff0c;知道了使用tcp建立连接的一系列操作&#xff0c;并通过write与read函数能让客户端与服务端进行通信&#xff0c;但是tcp是面向字节流的&#xff0c;有可能我们write时只写入了部分数据&#xff0c;此时另一端就来read了&#x…

rk3588局域网推流

最近无意间看见在网上有使用MediaMtx插件配合ffmpeg在Windows来进行推流&#xff0c;然后在使用其他软件进行拉流显示数据图像的&#xff0c;既然windows都可以使用 &#xff0c;我想linux应该也可以&#xff0c;正好手上也有一块RK3588的开发板&#xff0c;就测试了一下&#…

【每日刷题】Day35

【每日刷题】Day35 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 844. 比较含退格的字符串 - 力扣&#xff08;LeetCode&#xff09; 2. 2487. 从链表中移除节点 - 力…

【启明智显技术分享】“ESP-IDF环境搭建全攻略:告别基于乐鑫方案彩屏开发中的搭建难题”

前言&#xff1a; 【启明智显】专注于HMI&#xff08;人机交互&#xff09;及AIoT&#xff08;人工智能物联网&#xff09;产品和解决方案的提供商&#xff0c;我们深知彩屏显示方案在现代物联网应用中的重要性。为此&#xff0c;我们一直致力于为客户提供彩屏显示方案相关的技…

银行职员向媒体投稿发文章我找到了好方法

作为一名基层银行的媒体联络专员,我的日常工作中有一项至关重要的任务,那就是代表我所在的支行向各大媒体投稿,传播我们的金融服务、产品动态以及社会责任实践。起初,这项看似简单的工作却成了我职业生涯中的一大挑战。传统的邮件投稿方式,不仅耗时费力,而且审核流程严格,稿件从…

springboot3+springsecurity+redis 整合登录认证以及权限校验

1. 架构说明 整体架构如下(提供的对应的模块引入)&#xff0c;围绕着springsecurity中的三大核心展开&#xff1a; ​ 1、Authentication&#xff1a;存储了认证信息&#xff0c;代表当前登录用户 ​ 2、SeucirtyContext&#xff1a;上下文对象&#xff0c;用来获取Authenti…

扩散模型~

推荐&#xff1a;write_own_pipeline.ipynb - Colab (google.com) 基本管道 一直显示NVIDIA有问题&#xff0c;所以就把.to("cuda")去掉了&#xff0c;使用Colab运行的&#xff0c;代码如下&#xff1a; from diffusers import DDPMPipelineddpm DDPMPipeline.fr…

Java实战:验证改进的哥德巴赫猜想

改进的哥德巴赫猜想&#xff08;Improved Goldbach’s Conjecture&#xff09;声称每个大于5的奇数都可以表示为三个素数之和。这个猜想是对原始哥德巴赫猜想的扩展&#xff0c;针对奇数的情况。原始哥德巴赫猜想是指每个大于2的偶数都可以表示为两个素数之和。尽管改进的哥德巴…

Python轻量级Web框架Flask(13)—— Flask个人博客项目

0、前言: ★这部分内容是基于之前Flask学习内容的一个实战项目梳理内容,没有可以直接抄下来跑的代码,是学习了之前Flask基础知识之后,再来看这部分内容,就会对Flask项目开发流程有更清楚的认知,对一些开发细节可以进一步的学习。项目功能,通过Flask制作个人博客。项目架…

自动化运维工具-Ansible

一、Ansible概述 Ansible是一种基于python开发的自动化运维工具&#xff0c;它只需要在服务端安装ansible&#xff0c;无需在每个客户端安装客户端程序&#xff0c;通过ssh的方式来进行客户端服务器的管理&#xff0c;基于模块来实现批量数据配置、批量设备部署以及批量命令执…