跌宕起伏的小程序之登录组件

2023-11-22 10:31

本文主要是介绍跌宕起伏的小程序之登录组件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

缘起?

开始的开始,简单粗暴。在微信小程序里,一行wx.getUserInfo即可弹窗用户授权登陆。大部分小程序图省事,直接在打开小程序的时候就调这个方法。所以那时候一个印象就是随便打开一个小程序,进去就是弹窗让我登陆,想拿我的微信信息,给人一种不安全的感觉。

当时的代码长这样:

<script>
wx.getUserInfo({success(res) {// res.userInfo 用户信息}
})
</script>

如果要与业务结合起来,通常会是这样(以下代码示例均使用wepy框架):

<template><!-- 下面这个操作需要用户登陆 --><view @tap="clickA">需要登陆操作A</view><view @tap="clickB">需要登陆操作B</view>
</template>
<script>
{methods = {clickA () {await getUserInfo() // wx.getUserInfo 封装在这里面// 接着写A的业务逻辑}clickB () {await getUserInfo()// 接着写B的业务逻辑}}
}</script>

变数?

为了防止滥用,微信后来决定调整这个交互,改变了授权登陆流程。于是就发布了一个公告,很突然的,就是直接调wx.getUserInfo不再弹窗询问用户是否授权。而是需要使用原生button组件,用户实际操作点击了屏幕才能触发。

640?wx_fmt=gif

此时的代码变成了这个熊样:

<template><button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">点击授权登陆</button>
</template>
<script>{methods = {bindGetUserInfo (e) {// e.detail.userInfo 用户信息}}}
</script>

看上去问题不大,其实已经原地爆炸。现在如果和业务结合起来就会有很多赘余代码:

<template><view><button class="auth-btn" open-type="getUserInfo" bindgetuserinfo="clickA"></button>需要登陆操作A</view><view><button class="auth-btn" open-type="getUserInfo" bindgetuserinfo="clickB"></button>需要登陆操作B</view>
</template>
<script>{methods = {clickA (e) {if (e.detail.errMsg === 'getUserInfo:ok') {// 接着写A的业务逻辑}}clickB (e) {if (e.detail.errMsg === 'getUserInfo:ok') {// 接着写B的业务逻辑}}}}
</script>
<style lang="less">.auth-btn {// 使其cover在父容器上并透明}
</style>

之前接手过一个遗留项目,里面密密麻麻充斥着这种代码,我看5分钟吐了3次?。DRY!DRY!DRY!有代码洁癖加重度强迫症的我完全不能忍。

归途?

作为一个有追求的追风少年,思虑良久,得想个辙?,不然之后的开发生涯就充斥着难受。wepy是一个组件化的小程序框架,可以像写vue组件一样去写小程序的自定义组件。于是就有了一个很自然的想法。把登陆按钮封装起来,使其足够方便。

最后的最后,组件化后的代码长这样?:

<template><view><LoginButton1 @tap.user="clickA"></LoginButton1>需要登陆操作A</view><view><LoginButton2 @tap.user="clickB"></LoginButton2>需要登陆操作B</view>
</template>
<script>import LoginButton from '@/components/LoginButton'{components = {LoginButton1: LoginButton,LoginButton2: LoginButton,}methods = {clickA () {// 直接写A的业务逻辑}clickB () {// 直接写B的业务逻辑}}
</script>

{ LoginButton1: LoginButton, LoginButton2: LoginButton }这个诡异的写法主要是因为wepy的组件是静态组件(其实就是编译时代码复制),导致每实例化一个都要分配一个id?。据说wepy即将发布2.0版本,会解决这个问题,甚是期待。

这可能不是最优方案,但确实方便了许多。

临末,送大家个福利?

qr-code-258.jpg

转载于:https://www.cnblogs.com/iovec/p/10495092.html

这篇关于跌宕起伏的小程序之登录组件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element