学习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直接的随机数,一般的颜色前面都有字母,这里就把获取颜色的字母作为一个随机数显示出来,让颜色更丰富些。
以上就是今天学习的内容,不足之处还有很多,革命尚未成功,同志仍需努力!!!

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

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

相关文章

括号匹配(栈)

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; c有栈 但是C语言没有 到那时我们可以自己造 这里的代码是直接调用栈&#xff0c;然后调用 等于三个左括号的任意一个 我们就入栈 左括号&#xff08;入栈&#xff09; 右括号 取出栈顶数据&#xff0c;出栈并且进行匹配…

力扣【旋转函数】python

如果直接用暴力的话&#xff0c;只能过4个样例好像&#xff0c;超时 因此得用递推公式 F1F0前n-1个数-(n-1)*第n个数 F0sum(nums)-n*第n个数 nlen(nums) ans[]#定义一个存最大值值的列表 ss sum(nums) dm 0 for j in range(n):dm j * nums[j] ans.append(dm) print(dm) n…

树莓派对FPGA板子上的流水灯程序的控制

文章目录 一 树莓派使用教程二 树莓派串口代码三 Verilog代码四 quartus引脚绑定五 运行效果总结 分别在DE2-115开发板和树莓派上编写串口通信程序&#xff0c; 实现树莓派串口指令对FPGA板子上的流水灯程序的控制&#xff0c;控制方式自定。 一 树莓派使用教程 参考&#xff…

重发布与路由决策

单点重发布 将A协议--->B协议 [r2-rip-1]import-route ospf 1 将静态---->B协议 [r2-rip-1]import-route static 将直连---->B协议 [r2-rip-1]import-route direct 双点重发布 路由回馈&#xff1a;指的是从某协议传出的路由信息又被传回该协议中。可以引起选路…

python数据分析——seaborn绘图1

参考资料&#xff1a;活用pandas库 matplotlib库是python的和兴绘图工具&#xff0c;而seaborn基于matplotlib创建&#xff0c;它为绘制统计图提供了更高级的接口&#xff0c;使得只用少量代码就能生成更美观、更复杂的可视化效果。 seaborn库和pandas以及其他pydata库&#xf…

第十五节:贪心算法(下)

一 、 贪心算法的解题套路实战一&#xff08;最多的会议宣讲场次&#xff09; 1.1 描述 一些项目要占用一个会议室宣讲&#xff0c;会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始的时间和结束的时间 你来安排宣讲的日程&#xff0c;要求会议室进行的宣讲的场次最多。…

vue:网页icon无法显示

logo文件放在public文件夹下&#xff0c;在html里设置icon。 本地源码运行后发现网页icon无法显示我们设置的logo&#xff0c;而是显示了浏览器默认icon。 这个问题不需要解决&#xff0c;部署后网页icon显示就正常了。

通过ip addr命令无法获取到ip地址,无法ping通百度

问题 今天通过VM安装CentOS虚拟机时&#xff0c;安装完成后&#xff0c;想查看ip地址&#xff0c;使用ip addr命令&#xff0c;发现没有展示网络ip地址&#xff0c;ping百度也不通。 解决方案 CentOS使用网络配置文件来设置网络接口的参数&#xff0c;出现这个问题说明网络的…

华为认证存储HCIE有用吗?

首先&#xff0c;对于个人来说&#xff0c;获得华为存储认证可以证明其具备信息存储技术的专业能力 1.专业认可&#xff1a;获得华为存储认证&#xff0c;尤其是HCIE-Storage级别的证书&#xff0c;意味着持有者对信息存储技术有着全面深入的理解&#xff0c;能够设计、部署、…

spring cloud微服务example 入门第一个例子

新建Maven工程 删除src目录&#xff0c;修改poml.xml <modelVersion>4.0.0</modelVersion><groupId>org.example</groupId> <artifactId>SpringCloud_example</artifactId> <version>1.0-SNAPSHOT</version> <packaging&g…

苹果cms:伪静态设置教程

官方默认的网站模式是动态模式&#xff0c;动态模式下链接中自带有“index.php”想要去除网站链接中的index.php&#xff0c;首先需要开启网站的模式为伪静态模式。这样比动态模式那一长串的链接看着也舒服一些&#xff0c;最重要的是迎合搜索引擎的喜好加快收录提高排名。 1、…

【CSP CCF记录】202206-2 寻宝!大冒险!

题目 过程 思路 1.绿化图坐标边界太大&#xff0c;不能直接用矩阵表示&#xff0c;可以用一个二维数组存储有树坐标的x,y值。 定义两个数组&#xff1a;绿化图arr[1005][2]、宝藏图数组b[55][55] 2. 依据条件&#xff0c;从绿化图中第一棵树的坐标开始区域遍历。统计绿化图…