uni-appx,实现登录功能,弹窗功能。组件之间传值

 这篇文章的内容使用组合式API实现的,只有弹窗部分选择式API的写法介绍。如果想要看其他选择式API,还请下载官方的hello-uni-appx源码进行学习,查看。想要看组合式API的写法,请查看源码 hello-uvue。

hello-uni-appx源码

ae2012d7f2104d7fa86d9dd462af9f88.png

e4b915b2aaf54e43981345e061fa6d4f.png

7b43dc313e6e45be941877c7b0238c3f.png

 

 

相比于uni-app,uni-appx有了更多约束,无论是写CSS还是写TypeScript,都是举步维艰。

在开发时,强烈建议浏览器和模拟器都要打开,因为有很多问题浏览器是完全没有问题的,但是到了手机端,模拟器就是有问题不能执行或者没有效果的。

UI库

刚开始,我想着用一个好用的UI库,但是试了很多UI库,都是浏览器正常,手机端就报错,各种不能使用。最后只能放弃坚持寻找UI库的想法

如果您有好用的UI库,请留言,让我也学习学习,谢谢~

Form表单

因为没有找到好用的UI库,所以我只能用原生的form表单先实现一下登录功能了。

问题一:如何定义form表单的对象

如果这里是因为类型出错阻断了,可以查看官方文档中uts中类型的介绍的内容。

这里我尝试了很多次,使用const userInfo = ref<UTSJSONObject>({})不是一个好写法,在获取值时,编译时代码会阻断。所以使用了let的方式,官网中介绍UTSJSONObject类型时,也是用let进行举例介绍的。

	let userInfo : UTSJSONObject = {username: "",password: ""};

:value中的取值方式必须是 userInfo['username']

<form ref="userInfo" @submit="onFormSubmit"><input class="uni-input" name="username" :value="userInfo['username']" placeholder="请输入用户名" /><input class="uni-input" name="password" :value="userInfo['password']" placeholder="请输入密码" /><button class="btn-submit" form-type="submit" type="primary">登录</button><checkbox class="form-checkbox" :checked="privacyChecked && userChecked" @click="onChangeCheckBox"><text class="text" @click="openPopup($event as UniEvent,'privacy')">《隐私政策》</text>和<text class="text" @click="openPopup($event as UniEvent,'user')">《用户协议》</text></checkbox>
</form>

a009164aa53e464393236327026c4833.png 

问题二:如何实现弹窗组件的使用 

用官方组件 uni-popup,定义ref,ref的类型是 组件名称 + ComponentPublicInstance

<uni-popup ref="popupRef" type="center" :mask-click="false"><view style="color: aliceblue;">底部弹出 Popup 自定义圆角</view><button @click="closePopup">关闭</button>
</uni-popup>

组合式 API

const popupRef = ref<UniPopupComponentPublicInstance | null>(null);
// 打开弹窗,注意open后面的写法,
const openPopup = () => {popupRef.value?.open!(); // open()这个方法一定存在// popupRef.value?.open?.(); // 写法二
}// 关闭弹窗
const closePopup = () => {popupRef.value?.close!()
}

选择式API

data() {return {popupRef: null as UniPopupComponentPublicInstance | null}
},
methods: {openPopup() {this.popupRef = this.$refs['popupRef'] as UniPopupComponentPublicInstance; //写法一,data中定义了popupRef// let popupRef = this.$refs['popupRef'] as UniPopupComponentPublicInstance; // 写法二popupRef.open();},closePopup() {this.popupRef = this.$refs['popupRef'] as UniPopupComponentPublicInstance;popupRef.close();},
}

 因为我代码中的弹窗样式是自己写的,所以最后就没有用组件。

问题三:如何写原生的函数对象

在uni-app中我们直接在函数中写$event就行,但是在uni-appx中,因为类型的判断,不可以那样写

<text class="text" @click="openPopup($event as UniEvent,'privacy')">《隐私政策》</text>
const openPopup = (e : UniEvent, t : string) => {e.stopPropagation();open.value = truetype.value = t
}

父子组件传值

父组件中的写法和原来uni-app中一样

因为我是在根目录下的components中创建的子组件,所以在uni-appx中,父组件引入省略了引入的操作,如果不是这样的写法,需要手动引入,请查看官网中的介绍。

<privacy-popup v-if="open" ref="popupRef" :open="open" :type="type" @onClose="closePopup"></privacy-popup>

子组件中用组合式API的写法

const props = defineProps({type: {type: String,default: "privacy"},btnMessage: {type: String,default: ""},open: {type: Boolean,default: false},
})// onClose 在父组件中的函数名
const emit = defineEmits(['onClose'])const onCancel = () => {emit('onClose', false, props.type)
}
const onOk = () => {emit('onClose', true, props.type)
}

text标签CSS中的一些问题

text标签中取消了首行缩进的属性,无论我写在rich-text、还是render>h中,都不生效

view标签CSS中的一些问题

disoplay:只剩下了flex | none;两种情况,其他的一概不支持

overflow:hidden;不生效

超出滚动的属性被标签<scroll-view></scroll-view>替换。
1. 组件有了固定高度就可以滚动了
2. 不添加任何属性,默认就是纵向滑动
3. scroll-view文档地址

 

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

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

相关文章

Vue + Element UI + JSEncrypt实现简单登录页面

安装依赖 npm install jsencrypt --save局部引入 import JSEncrypt from jsencrypt/bin/jsencrypt;登录页面index.vue <template><div class"loginbody"><div class"logindata"><div class"logintext"><h2>Wel…

Uncaught (in promise) RangeError: Offset is outside the bounds of the DataView

问题 通常发生在Failed to load resource: the server responded with a status of 404 (Not Found) 后&#xff0c;资源读取错误导致的问题。 解决 Failed to load resource: the server responded with a status of 404 (Not Found)_unity webgl failed to load resource:…

LVS-DR群集

LVS-DR集群 LVS-DR(Linux Virtual Server DIrector Server)工作模式&#xff0c;是生产环境中最常用的一种工作模式。 LVS-DR工作原理 LVS-DR模式&#xff0c;Director Server作为群集的访问入口&#xff0c;不作为网关使用&#xff0c;节点DirectorServer与Real Server需要…

TensorRT-Int8量化详解

int8量化是利用int8乘法替换float32乘法实现性能加速的一种方法 对于常规模型有&#xff1a;y kx b&#xff0c;此时x、k、b都是float32, 对于kx的计算使用float32的乘法 对于int8模型有&#xff1a;y tofp32(toint8(k) * toint8(x)) b&#xff0c;其中int8 * int8结果为in…

Python列表创建使用心得详解

概要 列表是Python中最常用的数据结构之一,它用于存储有序的元素集合。Python提供了多种方式来创建和操作列表,使得列表在数据处理、存储和操作中非常灵活。本文将详细介绍Python列表创建的各种技巧,包括基础创建方法、列表推导式、内置函数和高级创建技巧,并包含具体的示…

初出茅庐的小李博客之C语言文件操作

C语言文件操作 在C语言中&#xff0c;文件操作主要是通过标准库函数来实现的。 今天有时间就来学习下一些常用的文件操作函数&#xff1a; C 语言提供了一个 FILE 数据结构&#xff0c;记录了操作一个文件所需要的信息。该结构定义在头文件stdio.h&#xff0c;所有文件操作函…

python库(3):Cerberus库

1 Cerberus简介 Cerberus 是一个Python数据验证库&#xff0c;设计用于验证数据结构的有效性和一致性。它提供了一种简单而强大的方式来定义和应用验证规则&#xff0c;特别适用于处理用户输入的验证、配置文件的检查以及API的参数验证等场景。下面将详细介绍 Cerberus 的特点…

伦敦金价格走势图的资金管理怎么进行?

要成熟地交易伦敦金价格走势图&#xff0c;其实并不是一件容易的事情。其一&#xff0c;我们在很多广告或者周边朋友的宣传之下&#xff0c;觉得它能够帮助我们很快之内实现很多的财富增值&#xff0c;其二&#xff0c;很多投资者觉得伦敦金交易虽然不错&#xff0c;但是风险好…

对象被优化以后才是高效的C++编程

课程总目录 文章目录 一、对象会调用哪些方法、对象优化的三个原则二、CMyString的代码问题三、四、添加带右值引用参数的拷贝构造和赋值函数五、CMyString在vector上的应用六、move移动语义和forward类型完美转发七、再聊vector容器使用对象过程中的优化 一、对象会调用哪些方…

Python从0到100(三十六):字符和字符集基础知识及其在Python中的应用

1. 字符和字符集概述 字符(Character)是构成书面语言的基本元素&#xff0c;它包括但不限于各国家的文字、标点符号、图形符号和数字。字符集(Character set)则是一个包含多个字符的系统&#xff0c;用于统一管理和编码不同的字符。 常见字符集 ASCII&#xff1a;最早的字符…

SpringBoot 启动流程一

SpringBoot启动流程一 我们首先创建一个新的springboot工程 我们不添加任何依赖 查看一下pom文件 我们创建一个文本文档 记录我们的工作流程 我们需要的是通过打断点实现 我们首先看一下启动响应类 package com.bigdata1421.start_up;import org.springframework.boot.Spr…

音视频流媒体视频平台LntonAIServer视频监控平台工业排污检测算法

在当今社会&#xff0c;环境保护和可持续发展已成为全球关注的焦点。工业生产作为经济发展的重要支柱&#xff0c;其对环境的影响不容忽视。因此&#xff0c;如何有效地监控和管理工业排污&#xff0c;成为了一个亟待解决的问题。LntonAIServer工业排污检测算法应运而生&#x…

开发电商ERP系统需要接入哪些平台API?

跟随全渠道发展趋势&#xff0c;很多实体商家开设电商店铺&#xff0c;为消费者提供便捷的购物体验&#xff0c;增强消费者的满意度&#xff0c;同时也提升了企业自身的市场竞争力。为了满足商家业务拓展需求&#xff0c;很多原本主要服务于实体商贸企业的ERP服务商&#xff0c…

CSS filter(滤镜)属性,并实现页面置灰效果

目录 一、filter&#xff08;滤镜&#xff09;属性 二、准备工作 三、常用的filter属性值 1、blur(px) 2、brightness(%) 3、contrast(%) 4、grayscale(%) 5、opacity(%) 6、saturate(%) 7、sepia(%) 8、invert(%) 9、hue-rotate(deg) 10、drop-shadow(h-shadow v…

编译rust程序,并让它依赖低版本的GLIBC库

在linux环境下编译rust程序,编译好的程序会依赖你当前系统的GLIBC库,也就是说你的程序无法在使用更低版本GLIBC库的linux系统中运行。 查看当前系统的GLIBC版本: strings /lib64/libc.so.6 | grep GLIBC 为了让编译的程序依赖比较低版本的GLIBC库,我们最好在centos7下编译…

JavaScript基础-函数(完整版)

文章目录 函数基本使用函数提升函数参数arguments对象&#xff08;了解&#xff09;剩余参数(重点)展开运算符(...) 逻辑中断函数参数-默认参数函数返回值-return作用域(scope)全局作用域局部作用域变量的访问原则垃圾回收机制闭包 匿名函数函数表达式立即执行函数 箭头函数箭头…

【机器学习】Google开源大模型Gemma2:原理、微调训练及推理部署实战

目录 一、引言 二、模型简介 2.1 Gemma2概述 2.2 Gemma2 模型架构 三、训练与推理 3.1 Gemma2 模型训练 3.1.1 下载基座模型 3.1.2 导入依赖库 3.1.3 量化配置 3.1.4 分词器和模型实例化 3.1.5 引入PEFT进行LORA配置 3.1.6 样本数据清洗与加载 3.1.7 模型训练与保…

SCI一区TOP|徒步优化算法(HOA)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;SO Oladejo受到徒步旅行启发&#xff0c;提出了徒步优化算法&#xff08;Hiking Optimization Algorithm, HOA&#xff09;。 2.算法原理 2.1算法思想 HOA灵感来自于…

小试牛刀-Solana合约账户详解

目录 一.Solana 三.账户详解 3.1 程序账户 3.2 系统所有账户 3.3 程序派生账户(PDA) 3.4 Token账户 四、相关学习文档 五、在线编辑器 Welcome to Code Blocks blog 本篇文章主要介绍了 [Solana合约账户详解] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ …

【人工智能】--生成对抗网络

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;引言 &#x1f349;GAN 的基本原理 &#x1f348;生成器&#xff08;Generator&#xff09; &#x1f348;判别器&…