学习Uni-app开发小程序Day24

这一章节是要将从首页的点击进入子组件,然后展示对应的数据。这里涉及到页面传递参数、将获取的数据渲染到页面上

给组件通过defineProps声明变量传值渲染

因为使用的是子组件,那就需要再父组件中点击后,给子组件传递参数,根据参数得到对应的数据并渲染到页面上。效果图:
在这里插入图片描述
在初始进入页面时,就要获取这里的数据,数据包含了图片缩略图、时间、图片类型。

	// 获取专题精选的图片地址
	const classifyList=ref([])
	const getClassify = async () => {
		let res=await apiGetClassify({pageSize:8});
		classifyList.value=res.data
	}
	getClassify();
	

先要获取数据,这是获取数据的方法,上一章已经学习了将网络请求进行封装,这里直接调用接口就可以了,获取到数据后,那要怎么给子组件传递参数?这就需要使用defineProps声明变量后,在从父组件传递数据过去。
子组件声明变量:

defineProps({
		isMore: {
			type: Boolean,
			default: false
		},
		item: { //数据源
			type: Object, //类型,因为是传对象,这里使用Object
			default () { //这里定义对象的参数
				return {
					name: "默认名称",
					picurl: "../../common/images/classify1.jpg",
					updateTime: Date.now() - 1000 * 60 * 60 * 5
				}
			}
		}
	})

子组件定义了对象接收的参数,那父组件要怎么传递呢?
在这里插入图片描述
直接使用子组件定义的对象名后,这里就使用:item=“item”,将需要的数据传递过去。
子组件接收到数据后,直接使用定义的对象名将数据渲染到页面上
在这里插入图片描述
这里圈出的是什么?查看数据源,发现服务器给的是一时间戳,那如何将时间戳更改成效果图的形式?例如:大于1分钟小于1小时的时候,页面显示的是多少分钟前发布的。这种情况要如何编写?这里就要说下ChatGPT强大了,可以直接使用AI编写,将编写的js放在公共模块下,这里就可以直接使用了,下面把AI写的js贴出来

export function timeDifference(timestamp) {
    const now = new Date().getTime();
    const difference = now - timestamp;

    const minute = 60 * 1000;
    const hour = 60 * minute;
    const day = 24 * hour;
    const month = 30 * day;

    if (difference < minute) {
        return '1分钟';
    } else if (difference < hour) {
        return Math.floor(difference / minute) + '分钟';
    } else if (difference < day) {
        return Math.floor(difference / hour) + '小时';
    } else if (difference < month) {
        return Math.floor(difference / day) + '天';
    } else if (difference < 3 * month) {
        return Math.floor(difference / month) + '月';
    } else {
        return null;
    }
}


export function gotoHome(){
	uni.showModal({
		title:"提示",
		content:"页面有误将返回首页",
		showCancel:false,
		success: (res) => {
			if(res.confirm){
				uni.reLaunch({
					url:"/pages/index/index"
				})
			}
		}
	})
}

当AI给出的是当前页面的方法,我们把这个放在公共区域,那就需要把该方法暴露出去,其他地方才能使用,在方法前面添加 export就好

组件深层跳转传参和多参数网络请求

上面组件已经显示数据了,那如果要看同类型下的其他数据呢,只用点击进入后,就可以继续访问网络数据了,那组件跳转如何传递参数呢?
在这里插入图片描述
在前面学习跳转的时候,已经学习了组件跳转传参的方式,第一个参数是使用’?‘的形式,第二个以后得参数,要使用’&'将所有参数拼接起来,
那如何接收呢?
我们使用onLoad()接收,这里记着,使用onLoad接收的时候,要在当前页面引用@dcloudio/uni-app,不然是不能使用的。
在onLoad接收的时候,可以直接得到传递的参数,

onLoad((e)=>{
		let{id=null,name=null}=e
		queryParams.classid=id;
		uni.setNavigationBarTitle({
			title:name
		});
		getClassList(); //获取数据
	})

这就是接受参数后再访问网络,这里需要注意,因为uni-app的生命周期,这里不能把网络访问放在下面调用,必须放在onLoad之后访问。

多参数访问网络数据

这里访问服务器获取数据的时候,就需要传递进入页面的类型、id、数量等,这就是多个参数,为了方便我们,直接在外部定义一个空对象,将需要传递的参数全部写到对象中,给对象一个默认值。然后在onLoad中给对象赋值,使用的时候,可以直接使用对象名就能把所有的参数传递过去,我们已经在网络请求中进行了封装了。
在这里插入图片描述
这里特别提醒下,也是我犯下的错,在这里插入图片描述
我已经定义了对象,在请求的时候,将对象传递过去,我是把对象放在{}中,死活获取不到,最后各种尝试,才发现,居然把对象又放在对象中,这样服务器解析的时候,就没办法拿到定义的参数名了,这里说下,大家谨记

下面是这个页面的详细逻辑代码

<template>
	<view class="classlist">
		<view class="content">
			<navigator url="/pages/preview/preview" class="item" v-for="item in classList" :key="item._id">
				<image :src="item.smallPicurl" mode="aspectFill"></image>
			</navigator>

		</view>

	</view>
</template>

<script setup>
	import {ref} from 'vue';
	import {apiClassList} from "@/api/apis.js"
	import {onLoad,onReachBottom} from "@dcloudio/uni-app"
	const classList = ref([]);
	const queryParams={ //对象设置默认值
		classid:0,
		pageNum:1,
		pageSize:9
		
	}
	onLoad((e)=>{
		let{id=null,name=null}=e
		queryParams.classid=id;
		uni.setNavigationBarTitle({
			title:name
		});
		getClassList();
	})

	const getClassList = async () => {
		let res = await apiClassList(queryParams);
		classList.value = res.data;
	}
</script>

<style lang="scss" scoped>
	.classlist {
		.content {
			display: grid;
			grid-template-columns: repeat(3, 1fr);
			gap: 5rpx;
			padding: 5rpx;

			.item {
				height: 440rpx;

				image {
					width: 100%;
					height: 100%;
					display: block;
				}
			}

		}
	}
</style>

这章就到这里了,加油加油!!!

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

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

相关文章

2021年上半年软件设计师上午真题及答案解析

1.在CPU中&#xff0c;用&#xff08; &#xff09;给出将要执行的下一条指令在内存中的地址。 A.程序计数器 B.指令寄存器 C.主存地址寄存器 D.状态条件寄存器 2.以下关于RISC和CISC计算机的叙述中&#xff0c;正确的是&#xff08; &#xff09;。…

iptables防火墙【其二 实验篇】

保存&#xff0c;还原规则 防火墙规则的备份和还原 导出&#xff08;备份&#xff09;所有表的规则 iptables-save > /opt/ipt.txt 导入&#xff08;还原&#xff09;规则 iptables-restore < /opt/ipt.txt 将iptables规则文件保存在 /etc/sysconfig/iptables 中&#xf…

Rust学习心得

我分享一下一年的Rust学习经历&#xff0c;从书到代码都一网打尽。 关于新手如何学习Rust&#xff0c;我之前在Hacker News上看到了这么一篇教程&#xff1a; 这篇教程与其他教程不同的时&#xff0c;他不是一个速成教程&#xff0c;而是通过自己的学习经历&#xff0c;向需要…

常用的框架——— Android UtilCode

AndroidUtilCode是一个功能强大且易于使用的Android库。该库封装了Android开发中经常使用的具备完整演示和单元测试的功能。经过使用其封装的API&#xff0c;能够大大提升开发效率。该程序主要由两个模块组成&#xff0c;utilcode&#xff08;一般在开发中使用&#xff09;和su…

【C语言】实现贪吃蛇--项目实践(超详细)

前言&#xff1a; 贪吃蛇游戏大家都玩过吧&#xff1f;这次我们要用C语言来亲手制作一个&#xff01;这个项目不仅能让我们复习C语言的知识&#xff0c;还能了解游戏是怎么一步步做出来的。我们会一起完成蛇的移动、食物的生成&#xff0c;还有碰撞检测等有趣的部分。准备好了…

LeetCode 79.单词搜索

原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内…

基于51单片机的音乐喷泉

基于51单片机的音乐喷泉 &#xff08;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.检测音乐信号的声音强度&#xff0c;使喷头的水柱能够根据音乐的节奏和音量起伏&#xff1b; 2.系统将声音强度转化为模拟信…

【云原生】Kubeadm部署k8s

目录 一、部署步骤 二、部署kubernetes 2.1、所有节点关闭防火墙 核心防护 iptables规则 swap交换 2.2、修改主机名并添加主机映射 2.3、调整内核参数 三、安装Docker 3.1、所有节点安装docker 3.2、所有接点添加镜像加速器 3.3、开启docker、并设置开机自启、查看状态…

Visual Studio中MP编译参数

MP通常与OpenMP&#xff08;Open Multi-Processing&#xff09;关联&#xff0c;它是用于多平台共享内存并行编程的一个API。 在编译C或C代码时使用OpenMP&#xff0c;通常需要特定的编译参数来启用这一功能。对于GCC和G编译器&#xff0c;这些参数包括&#xff1a; -fopenmp…

【全开源】Java情侣飞行棋系统微信小程序+H5+微信公众号+APP 源码

情侣飞行棋系统源码&#xff1a;共享欢乐时光的数字新选择 引言 在这个数字化时代&#xff0c;人们越来越追求独特的娱乐方式&#xff0c;与伴侣共度美好时光。情侣飞行棋系统源码应运而生&#xff0c;它不仅仅是一款游戏&#xff0c;更是情侣间增进感情、共享欢乐时光的桥梁…

C++的线程安全队列模板类封装

目录 1 线程安全队列封装一 2 线程安全队列封装二 3 线程安全队列封装三 1 线程安全队列封装一 /*** ** Copyright (c) Huawei Technologies Co., Ltd. 2020-2022. All rights reserved.** Redistribution and use in source and binary forms, with or without* modif…

机器学习(五) -- 监督学习(3) -- 决策树

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;2&#xff09; -- 朴素贝叶斯 下篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;4&#xff09; -- 集成学习方法-随机森林 前言 tips&#xff1a…

JAVA面试题大全(九)

1、为什么要使用 spring&#xff1f; 方便解耦&#xff0c;便于开发支持aop编程声明式事务的支持方便程序的测试方便集成各种优秀的框架降低JavaEE API的使用难度 2、解释一下什么是 aop&#xff1f; AOP 是 Aspect-Oriented Programming 的缩写&#xff0c;中文翻译为“面向…

Java CRM客户关系管理系统源码:基于Spring Cloud Alibaba与Spring Boot,专为成长型企业设计

项目名称&#xff1a;CRM客户关系管理系统 功能模块及描述&#xff1a; 一、待办事项 今日需联系客户&#xff1a;显示当日需跟进的客户列表&#xff0c;支持查询和筛选。分配给我的线索&#xff1a;管理分配给用户的线索&#xff0c;包括线索列表和查询功能。分配给我的客户…

EDM图纸管理软件_图纸文档管理软件

图纸文档管理软件是一种用于管理和组织各种类型的图纸和文档的工具。它提供了一种集中存储、查找、共享和版本控制图纸和文档的方式&#xff0c;以便团队成员可以更有效地进行协作和管理。 以下是一些常见的图纸文档管理软件&#xff1a; 彩虹EDM系统&#xff1a;这是一款图纸文…

K8S认证|CKA题库+答案| 5. 创建 Ingress

5 . 创建 Ingress 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node k8s master …

java项目之图书管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的图书管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 系统主要分为管理员角色和用…

六种常用设计模式

单例设计模式 单例模式指在整个系统生命周期里&#xff0c;保证一个类只能产生一个实例&#xff0c;确保该类的唯一性。 单例模式分类 单例模式可以分为懒汉式和饿汉式&#xff0c;两者之间的区别在于创建实例的时间不同&#xff1a; 懒汉式&#xff1a;指系统运行中&#…

基于Python实现 HR 分析(逻辑回归和基于树的机器学习)【500010104】

介绍 数据集说明 此数据集包含与员工有关的综合属性集合&#xff0c;从人口统计细节到与工作相关的因素。该分析的主要目的是预测员工流动率并辨别导致员工流失的潜在因素。 在这个数据集中&#xff0c;有14,999行&#xff0c;10列&#xff0c;以及这些变量&#xff1a;满意度…

【Python】 如何使用逗号作为千位分隔符打印数字

基本原理 在Python中&#xff0c;打印数字时自动添加千位分隔符可以提高数字的可读性&#xff0c;尤其是在处理大数字时。Python提供了多种方法来实现这一功能&#xff0c;包括使用内置的format()函数、f-string&#xff08;格式化字符串字面量&#xff09;以及locale模块。 …