学习Uni-app开发小程序Day10

2024-05-14 04:36
文章标签 学习 程序 app 开发 day10 uni

本文主要是介绍学习Uni-app开发小程序Day10,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面学习了局部组件的创建和简单使用,今天学习了slot(插槽)和组件之间的传值

1. 插槽的使用
在components中,创建一个组件,给组件设置头部布局、内容布局、底部布局,例如:

<template><view class="layout"><view class="header">头部布局</view><view class="main">内容布局</view><view class="footer">底部区域</view></view>
</template><script setup></script><style lang="scss" scoped>
.layout{.header{height: 50px;}.main{min-height: 200px;		}.footer{height: 120px;background: orange;}
}
</style>

在父组件中引用的方式就是在父组件的template中根据子组件的名称进行引用。在父组件中,要给各个位置添加具体的数据的时候,就要用到插槽了,例如:
在这里插入图片描述
这里添加slot,这里出现两个,并且定义名称,这是具名插槽,如果在子组件中有多个插槽,就需要用具名插槽,不然父组件不能明确是给哪里设定的数据
在这里插入图片描述
这里在引用子组件中,因为使用了slot,只能是使用template这个标签,
v-slot:header:这是定义的插槽,在父组件中要用到这种方式,才能定位到要在那个插槽中编辑内容,简便方式是:#header
这里穿插一个:uni-app点击跳转页面,
我这里给一个button,点击后跳转到其他页面,
@click="goto(‘/pages/demoCom/demo-slot’);这是给按钮一个点击事件,点击后进入方法goto中,里面是需要跳转的页路径
function goto(url) {
uni.navigateTo({
url: url
})
}
这里使用的是uni的api,navigateTo,具体的可以查看uni-app的api文件

2. 组件之间传递值
当设置了父组件、子组件,有时要从父组件给子组件传递值,这里就要使用Props,
在子组件中设定接收的参数名,父组件传递过去,例如:

这是父组件,可以传递文字、数组、对象

<template><view class="box"><!-- <userInfo :userName="uname" ></userInfo> --><userInfo :obj="obj"></userInfo></view>
</template>
<script setup>import { ref } from 'vue';const uname=ref("王五");// const avater=ref("../../static/pic1.png")const obj=ref({name:"王五",avater:"../../static/pic1.png"})</script>

下面是子组件接收

<template><view class="userInfo"><!-- <image :src="avater" mode="" class="avater"></image><view class="userName">{{userName}}</view> <view class="userName">{{uName}}</view>--><!-- 这里是直接传递个对象,这是在测试的过程中,进行的显示 --><!-- <view>{{obj}}</view> --><!-- 要显示对象的时候,就直接用接收的对象,然后获取对象的值 --><image :src="obj.avater" mode="" class="avater"></image><view class="userName">{{obj.name}}</view></view>
</template><script setup>import {computed} from "vue";//这是接收父组件传递的参数,使用的方法是defineProps,// const props = defineProps(['userName', 'avater'])// 如果要给传过来的参数进行定义,就是定义穿过来的参数的类型; 例如:// const props=defineProps({// 	userName:String,// 	avater:String// })// 如果要加上默认值,就是当不传的时候,就给一个默认的值// const props=defineProps({// 	userName:{// 		type:String,// 		default:"匿名"// 	},// 	//这里做个记录,当组件设置了默认值,但是在父组件中,有传当前值,只是类型错误的时候,控制台会报警告,// 	// 如果在父组件不加入这个参数,则不会报警告,设置的默认值也会显示出来// 	avater:{// 		type:String,// 		default:"../../static/logo.png"// 	}// })// 传递对象// defineProps(["obj"]);// 传递对象的时候,添加默认值//在传递对象的时候,添加校验,这里需要使用default方法,然后所有的参数需要使用return的方式,定义默认值defineProps({obj:{type:Object,default(){return {name:"匿名",avater:"../../static/logo.png"}}}})//如果要打印父组件传递过来的参数,就需要将参数设定一个变量,然后根据变量名得到传递的参数// console.log(props.userName);//如何要修改传递过来的参数,不能直接修改,接受过来的是一个只读的数据,可以使用计算属性,然后更改获取值,//在template中,就使用定义后的计算属性显示// const uName=computed( ()=>props.userName+"@")</script><style lang="scss">.userInfo {width: 100vw;height: 200px;align-items: center; //设置子节点对齐方式justify-content: center; //设置在父组件中的各个子节点的排列方式display: flex; //设置元素是否被视为块或者内联元素及子元素的布局flex-direction: column; //内部元素在flex容器中布局定义的方向image {width: 100px;height: 100px;border-radius: 50% ; //设置设置元素的外边框圆角。当使用一个半径时确定一个圆形,当使用两个半径时确定一个椭圆。}.userName {padding: 10px 0;font-size: 15px;}}
</style>

上面是子组件如果接收各种类型的方式,有详细注释,这里不在做过多的描述了。这就通过父组件给子组件传递参数的办法,这里只要是对defineProps()的使用,
当从子组件给父组件传递,就不能是这种方式了。下面是从子组件到父组件之间的传递:

<template><view><!-- <button @click="$emit('add',Math.random())">子组件按钮</button> --><button @click="onClick">子组件按钮</button><view >=============</view><!-- 如果子组件有两个或者两个以上的需要传递参数的组件,使用方法类似 --><input type="text" @input="onchange" maxlength="3"/></view>
</template><script setup>import {ref} from "vue"// 这里就是在组件中,传递两个参数,是用数组的形式,const emit=defineEmits(["add","onchange"])function onClick(){emit('add',Math.random())}// 这是传递子组件输入的值到父组件中function onchange(e){emit("onchange",e.detail.value)}
</script><style lang="scss" scoped>input{border: 1px solid #cfcfcf;height: 30px;}
</style>

这是子组件定义的方法,主要使用的$emit的方法,还有就是defineEmits();
下面是父组件接收的办法:

<template><view class=""><lxj-child @add="onAdd" @onchange="onchange"></lxj-child><!-- 下面是接收子组件传递的值,这里是进行style的设定,这里记录下,在接收子组件传递的值后,不能再tmplate中进行更改 --><view class="child" :style="{background:colo,fontSize:inputValue}">num:{{num}}</view></view>
</template><script setup>import { ref } from 'vue';const num=ref(0)const colo=ref("#fcf")const inputValue=ref("");// 这是接收子组件传递的值,在template中不能做更改,只能是在这里做修改const onchange=function(e){inputValue.value=e+"px"}const onAdd=function(e){num.value=e;colo.value="#"+getRandomChar()+String(e).substring(3,8)console.log(colo.value);}function getRandomChar() {const randomNumber = Math.floor(Math.random() * 6); // 生成0-5的随机数const charCode = 97 + randomNumber; // 97是字母a的ASCII码const randomChar = String.fromCharCode(charCode); // 将ASCII码转换成字符return randomChar;}// 使用函数// console.log(getRandomChar()); // 输出可能是 'a', 'b', 'c', 'd', 'e', 'f' 中的一个
</script><style lang="scss" scoped>.child{width: 200px;height: 70px;}
</style>

这就是从子组件到父组件之间的传递,这里做个记录;
穿插一个点:
function getRandomChar() {
const randomNumber = Math.floor(Math.random() * 6); // 生成0-5的随机数
const charCode = 97 + randomNumber; // 97是字母a的ASCII码
const randomChar = String.fromCharCode(charCode); // 将ASCII码转换成字符
return randomChar;
}
这个方法是获取从a-f直接的随机数,一般的颜色前面都有字母,这里就把获取颜色的字母作为一个随机数显示出来,让颜色更丰富些。
以上就是今天学习的内容,不足之处还有很多,革命尚未成功,同志仍需努力!!!

这篇关于学习Uni-app开发小程序Day10的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987764

相关文章

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio