uniapp组件传参方式梳理

news2024/10/5 14:32:25

前言
    日常开发中经常会遇到组件之间传递参数问题,整理了几种常见的传参方式,方便日后复习梳理.
常见组件传参的三种方式:
     1.父组件向子组件传参
     2.子组件向父组件传参
     3.子组件向非父组件传参

1.父组件向子组件传参

自定义组件:

<template>
  <view class="my-componet-box">
   <view class="view1">{{title}}</view>
   <view class="view2">{{subTitle}}</view>
  </view>
</template>

<script>
  export default {
    name:"my-componet",
    data() {
      return {
        title:'主标题',
        subTitle:"副标题"
      };
    },
     // 自定义组件中设置属性方式一,数组方式添加属性名
    // props:['title','subTitle'] 
    // 自定义组件中设置属性方式二,对象式添加属性默认值等详情信息
    props:{
      title: {
      					type: String,
      					default: "主标题",
      					required: false
      				},
      subTitle:{
        type: String,
        default: "副标题",
        required: false,
      }
    }
     
  }
</script>

<style lang="scss">
  .my-componet-box{
    width: 400rpx;
    height: 200rpx;
    background-color: green;
    .view1{
      font-size: 60rpx;
    }
  }

</style>

    首页index.vue引入自定义组件my-componet,页面内容如下:

<template>
	<view class="content">
    <view>我是首页</view>
     <!-- 不设置组件title和subTitle属性值则显示组件默认值 -->
   <!-- <my-componet ></my-componet> -->
    <!--  设置组件title和subTitle属性值则显示设置的信息-->
   <my-componet title="首页添加主标题" subTitle="首页添加副标题"></my-componet>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				
			}
		},
		onLoad() {

		},
		methods: {

		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

	.logo {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}

	.text-area {
		display: flex;
		justify-content: center;
	}

	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}
</style>

    首页中通过修改my-componet组件的titlesubtitle属性值就可以传递到组件中.组件中显示首页设置的属性信息.展示效果如下:
不设置组件title和subTitle属性值则显示组件默认值:
在这里插入图片描述
    设置组件title和subTitle属性值则显示设置的信息:
在这里插入图片描述

2.子组件向父组件传参

    自定义子组件my-componet-2:

<template>
  <view>
    文本输入框:<input placeholder="请输入内容..." @input="sendData" :value="content"/>
  </view>
  <view>子组件属性值content:{{content}}</view>
</template>

<script>
  export default {
    name:"my-componet-2",
    data() {
      return {
        content:"子组件属性值"
      };
    },
    methods:{
      sendData(e){
      this.$emit('myEvent',e.detail.value)
      }
    },
    props:{
      content:{
        type:String,
        default: "子组件默认内容",
      }
    }
  }
</script>

<style lang="scss">

</style> -->

    home页面引用子组件my-componet-2:

<template>
  <view>
    <vie>home页面</vie>
    <div>父子组件显示子组件属性值content:{{content}}</div>
    <my-componet-2 :content="content" @myEvent="showData"></my-componet-2>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        content:''
      };
    },
    methods:{
      showData(e){
        this.content=e
      }
    }
   
  }
</script>

<style lang="scss">

</style>

实现效果:
在这里插入图片描述

    文本框中输入8,子组件显示数据之后,父组件通过自定义事件进行获取数据,另外子组件向父组件传递值时支持对象或数组格式.
    子组件数据变化之后需要使用this.$emit进行注册事件,通过事件进行传值;父组件在子组件中使用自定义事件进行获取数据.

3.子组件向非父组件传参

    上面案例中my-componet-2home.vue中引用,如何保证在index.vue中进行传值?可以使用全局事件进行传参.my-componet-2中注册全局事件,index.vue中进行监听接口.具体代码如下:
my-componet-2:

<template>
  <view>
    文本输入框:<input placeholder="请输入内容..." @input="sendData" :value="content"/>
  </view>
  <view>子组件属性值content:{{content}}</view>
</template>

<script>
  export default {
    name:"my-componet-2",
    data() {
      return {
        content:"子组件属性值"
      };
    },
    methods:{
      sendData(e){
        // 注册全局事件
        uni.$emit("gloableEvent",e.detail.value)
      }
    },
    props:{
      content:{
        type:String,
        default: "子组件默认内容",
      }
    }
  }
</script>

<style lang="scss">

</style>

index.vue:

<template>
	<view class="content">
    <view>我是首页</view>
    <!--  设置组件title和subTitle属性值则显示设置的信息-->
   <my-componet title="首页添加主标题" subTitle="首页添加副标题"></my-componet>
			<text class="title">{{title}}</text>
		</view> -->
    <view>
      获取自定义组件my-componet-2输入的文本内容content:{{content}}
    </view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: 'Hello',
        content:''
			}
		},
		onLoad() {
      // 监听注册的全局事件
      uni.$on("gloableEvent",function(data){
        console.log("首页监听到的data:"+data);
      })
		},
    onUnload(){
      uni.$off("gloableEvent")
    },
		methods: {

		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

	.logo {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}

	.text-area {
		display: flex;
		justify-content: center;
	}

	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}
</style>

    home.vue中输入25,index.vue页面中就会打印输入的内容25,说明监听生效.展示效果如下:
在这里插入图片描述

    注意:onload页面初始化时监听,onupload页面销毁时销毁事件.
更多页面通讯方法可以参考官方链接:
https://uniapp.dcloud.net.cn/tutorial/page.html#off
    以上是关于组件进行参数传递整理的几种方式,如果感觉有所帮助欢迎评论区点赞留言!

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

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

相关文章

XPath入门

好久没用XPath了&#xff08;之前没做笔记&#xff09;&#xff0c;最近要用的时候又到处查。。。&#xff08;痛苦.jpg&#xff09;&#xff0c;还是记录下吧&#xff08;π_π&#xff09; XPath&#xff0c;是XML Path Language的缩写&#xff0c; 是一门在 XML 文档中查找…

【Linux】POSIX信号量

目录&#x1f308;前言&#x1f338;1、POSIX信号量&#x1f368;1.1、概念&#x1f367;1.2、PV操作&#x1f33a;2、POSIX信号量相关API&#x1f368;2.1、初始化和销毁信号量&#x1f367;2.2、等待信号量&#xff08;P&#xff09;&#x1f370;2.3、发布信号量&#xff08…

ImmutableList hessian2序列化失败问题分析

问题描述 A服务提供了个RPC接口给B服务使用&#xff0c;入参里有个参数是List类型&#xff0c;B服务在传参时使用Guava里的 ImmutableList&#xff0c;结果发生报错。 其中&#xff0c;B服务即consumer端的异常为&#xff1a;「com.alibaba.dubbo.remoting.RemotingException:…

AD采集之离散化概念(Quantizer模型使用介绍)

模拟量采集的PLC程序和功能块算法,可以参看下面的文章链接: PLC模拟量采集算法数学基础(线性传感器)_RXXW_Dor的博客-CSDN博客_模拟量采集线性校准模拟量采集库如何设计,具体算法代码请参看我的另一篇博文:PLC模拟量输入 模拟量转换FC:S_ITR_RXXW_BOSS的博客-CSDN博客_…

缓存数据库memcached

目录 一.memcached简介 memcached简介 memcached的特点 二.memcached安装 2.1.yum安装 2.2.源码安装 三.memcached命令 3.1.memcached的特征 3.2.memcached的set命令 3.3.memcached的get命令 四.memcached应用实例配置 4.1.图示 4.2.基础配置 4.3.环境规划 4.3.1…

SpringBoot程序的打包和运行

程序打包 SpringBoot程序是基于Maven创建的&#xff0c;在Maven中提供有打包的指令&#xff0c;叫做package。本操作可以在Idea环境下执行。 mvn package​ 打包后会产生一个与工程名类似的jar文件&#xff0c;其名称是由模块名版本号.jar组成的。 程序运行 ​ 程序包打好以…

TeeGrid for .NET 2023

TeeGrid for .NET 2023 TeeGrid for.NET为Visual Studio项目提供了一个非常快速的数据网格。打包功能的.NET数据网格提供了诸如排序、分组或过滤网格数据、可调整列大小、主详细视图、可拖动选择、网格滚动等功能。只需使用几个属性设置即可启用这些内置功能。TeeGrid可以链接到…

【一文看懂 Redis 核心】 基础数据结构 架构设计 存储 集群

基础数据结构 & 架构设计 & 存储 & 集群 redis 简单来说其实就是一个基于内存的 key - value 数据库&#xff0c;它本身结构的前提就是 key - value 类似于 Java 中的 HashMap &#xff0c;所以我们在聊 redis 的时候始终要记得这个前提&#xff0c;同时 redis 在…

【SpringCloud】Feign 和 OpenFeign 两者的异同点

Feign 和 OpenFeign 两者共同点Feign和OpenFeign作用一样&#xff0c;都是进行远程调用的组件。里面都内置了 Ribbon。都是加在消费端的注解&#xff0c;让消费端可以调用其他生产者的服务。Feign 和 OpenFeign 两者区别&#xff08;1&#xff09;依赖不同Feign 的依赖<!-- …

十九、Gtk4-Ui file for menu and action entries

Ui file for menu 你可能认为构建菜单真的很麻烦。是的&#xff0c;程序很复杂&#xff0c;需要很多时间来编码。这种情况类似于构建小构建。当我们构建部件时&#xff0c;使用ui文件是避免这种复杂性的好方法。菜单也是如此。 菜单的ui文件有界面和菜单标签。文件以interfac…

JavaScript 基本认识

JavaScript 简介 JavaScript 是什么&#xff1f; JavaScript 是互联网最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 Web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 JavaScript 是脚本语言&#xff1f; HTML 是超文本标记语言&am…

Groovy实现热部署

Groovy实现热部署一、概述二、准备工作2.1 规则接口IRule三、非Spring环境Groovy文件方式3.1 Groovy文件3.2 读取并生成实例3.3 使用这个实现四、数据库Groovy脚本方式4.1 Groovy脚本4.2 读取并生成实例五、Spring中使用Groovy的方式5.1 Groovy文件5.2 读取并生成实例5.3 使用这…

css sprite雪碧图制作,使用以及相关,图文gif

写在前面&#xff1a; 在网页制作中&#xff0c;雪碧图也是前端攻城狮必须掌握的一项小技能。百度词条对雪碧图的解释是&#xff1a;CSS雪碧 即CSS Sprite&#xff0c;也有人叫它CSS精灵&#xff0c;是一种CSS图像合并技术&#xff0c;该方法是将小图标和背景图像合并到一张图…

计算机组成原理 | 第一章:概论 | 冯诺依曼计算机 | 计算机硬件

文章目录&#x1f4da;冯诺依曼计算机的特点&#x1f4da;计算机硬件组成框图&#x1f4da;计算机硬件的主要技术指标&#x1f407;非时间指标&#x1f407;时间指标&#x1f511;计算技巧归纳&#x1f4da;小结&#x1f511;本章掌握要点&#x1f407;补充思考题&#x1f4da;…

[电商实时数仓] 用户行为数据和业务数据采集以及ODS层

文章目录1.数据仓库环境准备1.1 导入依赖1.2 创建相关包2.数据仓库运行环境2.1 Hbase环境2.2 模拟数据3.数仓开发之ODS层3.1 mysql配置修改3.2 FlinkCDC的程序3.3 结果检测1.数据仓库环境准备 1.1 导入依赖 <properties><java.version>1.8</java.version>&l…

为什么你的Facebook广告策略应该包括SEO

最近在看了很多关于 SEO的文章&#xff0c;今天想跟大家分享一些我个人关于 Facebook广告中的 SEO策略&#xff0c;以及它为什么是必要的。虽然在我看来&#xff0c;所有营销手段都需要结合 SEO才能发挥最大作用&#xff0c;但这并不意味着要完全放弃 SEO。如果你对以下问题感兴…

分享147个ASP源码,总有一款适合您

ASP源码 分享147个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 147个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1us1KTsxeaZlosHsqvrkC5Q?pwd81pl 提取码&#x…

Leetcode:51. N 皇后(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 回溯&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&a…

数字电位器程控可调电阻ic

一、前言 数字电位器又叫可编程电阻器&#xff0c;是一种替代传统机械电位器的新型CMOS数字、模拟混合信号处理集成电路&#xff0c;不需要搭建复杂的电路环境即可简单的通过CPU数字通讯实现电路调节&#xff0c;数字电位器也不能完全替代传统的机械电位器&#xff0c;在很多场…

Sentinel(限流、熔断、降级)、SpringBoot整合Sentinel、Sentinel的使用-60

一&#xff1a;Sentinel简介 Sentinel就是分布式系统的流量防卫兵 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 1.1 官方文档 官方文档&#…