uniapp JS文件里面调用自定义组件(不用每个页面在template中加组件标签)

前言
工具:uniapp
开发端:微信小程序
其他:uview 2.0
场景:路由器里面,统一验证是否已登录,如果没登录,则直接弹出登录弹窗出来,不管哪个页面都如此。 效果如下:
在这里插入图片描述
直接上代码:

第一步:组件封装 components目录下-新建文件-authorized.vue
(平常怎么封装的组件就怎么封装 建议把组件放到components目录下面) 需要的自己拿去改

<template>
	<view>
		<!-- 授权组件 -->
		<u-popup ref="model" :show="showAuth" bgColor='transparent' @close="showAuth=false" @open="open"
			:safeAreaInsetBottom='false' mode="bottom">
			<view class="contactUsDiv">
				<view class="title">
					<text>登录体验更多功能</text>
					<view class="iconfont icon-guanbi closeIcon" @tap="showAuth=false">
					</view>
				</view>
				<button class="wxBtn" @tap="goLoginWx" v-if="!checkValueWx">
					<view class="iconfont icon-weixin2">
					</view>
					<text>微信一键登录</text>
				</button>
				<button class="wxBtn" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" v-else>
					<view class="iconfont icon-weixin2">
					</view>
					<text>微信一键登录</text>
				</button>
				<view class="xieyi">
					<u-checkbox-group>
						<u-checkbox @change="checkboxChangeWx" activeColor="#FF8A00" v-model="checkValueWx"
							shape="circle" size='14' labelSize='14' label="已阅读并同意"></u-checkbox>
					</u-checkbox-group>
					<text class="xieyiP" @tap="goto('pages/public/userAgreement')">《用户协议》</text>
					<text></text>
					<text class="xieyiP" @tap="goto('pages/public/userAgreement')">《隐私协议》</text>
				</view>
			</view>
		</u-popup>
	</view>
</template>

<script>
	export default {
		name:'authorized',
		data() {
			return {
				showAuth: false,
				checkValueWx: false,
			};
		},
		methods: {
			open() {
				this.showAuth = true
			},
			checkboxChangeWx(e) {
				this.checkValueWx = e;
			},
			goLoginWx() {
				uni.$u.toast('请先阅读并同意用户协议和隐私协议');
			},
			// 微信授权登录
			getPhoneNumber(e) {
				let _this = this
				wx.login({
					success: function(res) {
						_this.getOpenIdCode = res.code
						console.log('微信授权成功', _this.getOpenIdCode);
						uni.login({
							provider: 'weixin',
							success: res => {
								if (res.code) {
									if (e.detail.errMsg == 'getPhoneNumber:ok') {
										const params = {
											loginType: '3',
											registerSource: '3',
											getPhoneCode: e.detail.code,
											getOpenIdCode: _this.getOpenIdCode
										};
										_this.fnLogin(params).then((res) => {
											console.log('res', res);
											_this.$store.commit('login', res.data);
											if (_this.judeDriverType()) {
												_this.backOnload()
											}
										})
										console.log('用户按了允许授权按钮,并且返回用户信息');
									} else {
										console.log('用户按了拒绝按钮');
									}
								}
							}
						});
					},
					fail: function(err) {
						console.log(err)
					}
				})
			},
			// 判断是否选择驾照类型
			judeDriverType() {
				if (!Object.keys(uni.getStorageSync('driveType')).length) {
					uni.$u.route({
						url: "pages/public/licenseType",
					})
					return false
				} else {
					return true
				}
			},
		}
	}
</script>

<style lang="scss">
	.contactUsDiv {
		position: relative;
		background-color: #fff;
		border-top-left-radius: 15rpx;
		border-top-right-radius: 15rpx;
	}

	.title {
		position: relative;
		@include flex;
		align-items: center;
		justify-content: center;
		padding: 50rpx 0;
		font-size: 17px;

		.closeIcon {
			position: absolute;
			right: 5%;
			top: 25rpx;
			font-size: 18px;
		}
	}

	.wxBtn {
		@include flex;
		justify-content: center;
		align-items: center;
		width: 80%;
		border-radius: 30rpx;
		background-color: #ACABAA;
		font-size: 15px;
		margin:0 auto;
		margin-bottom:50rpx;
		color: #fff;
		background-color: #00E71F;

		text {
			margin-left: 20rpx;
		}
	}

	.xieyi {
		@include flex;
		align-items: center;
		justify-content: center;
		margin-bottom:100rpx;
		font-size: 14px !important;

		.xieyiP {
			margin-left: 10rpx;
			color: $theme-color;
		}
	}
</style>

第二步: 项目根目录下新建vue.config.js文件(如果有则跳过)
vue.config.js文件中配置代码如下:

module.exports = {
	chainWebpack: config => {
		config.module.rule('vue').use('vue-loader').loader('vue-loader').tap(options => {
			const compile = options.compiler.compile
			options.compiler.compile = (template, ...args) => {
				if (args[0].resourcePath.match(/^pages/)) {
					template = `<view>
					              ${template}
					              <authorized ref="uAuthorized" style="z-index: 123;"/>
					            </view>`;
				}
				return compile(template, ...args)
			}
			return options
		})
	}
}

第三步: 将创建的authorized组件 全局注册(不贴代码了 不会的自行百度) 这一步至关重要

以上步骤操作完成 启动项目你就能看见所有的页面都加上组件
如下图:
在这里插入图片描述

在Js中调用 可以通过获取页面栈来调用 代码如下:

在这里插入图片描述
let pages = getCurrentPages();
let currentPage = pages[pages.length-1]
currentPage. v m . vm. vm.refs.uAuthorized.open()

完整撒花 !(可能纯在的问题: 博主只测试了 小程序没问题,估摸app可能不支持 需要小伙们自己去测试,最好使用条件编译符去处理)

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

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

相关文章

gin 中间件流程控制:Next()、 Abort()

gin 中间件流程控制 Next() 源码注释&#xff1a;Next应该只在中间件内部使用。它执行调用处理程序内部链中的挂起处理程序。 通俗的说&#xff0c;就是中间件放行&#xff0c;当一个中间件代码执行到Next()&#xff0c;会先执行它之后的函数&#xff0c;最后再来执行完本函…

Excel双向柱状图的绘制

Excel双向柱状图在绘制增减比较的时候经常用到&#xff0c;叫法繁多&#xff0c;双向柱状图、上下柱状图、增减柱状图都有。 这里主要介绍一下Excel的基础绘制方法和复杂一点的双向柱状图的绘制 基础双向柱状图的绘制 首先升降的数据如下&#xff1a; 月份上升下降20220359-…

给el-table实现列显隐

用过若依的都知道&#xff0c;在使用el-table 时候&#xff0c;实现列显隐效果是要给每个列加v-if 判断的&#xff0c;这种代码过于繁琐&#xff0c;于是翻看el-table包的代码&#xff0c;调试后发现内部的【插入】和【删除】两个方法可以达到我们要的效果。 项目不提供源码&a…

哈希表的简单模拟实现

文章目录 底层结构哈希冲突闭散列定义哈希节点定义哈希表**哈希表什么情况下进行扩容&#xff1f;如何扩容&#xff1f;**Insert()函数Find()函数二次探测HashFunc()仿函数Erase()函数全部的代码 开散列定义哈希节点定义哈希表Insert()函数Find()函数Erase()函数总代码 初识哈希…

《golang设计模式》第一部分·创建型模式-02-原型模式(Prototype)

文章目录 1. 概念1.1 简述1.2 角色1.3 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概念 1.1 简述 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象 1.2 角色 Prototype&#xff08;抽象原型类&#xff09;&#xff1a;它是声明克隆方法的接口…

ST官方基于米尔STM32MP135开发板培训课程(一)

本文将以Myirtech的MYD-YF13X以及STM32MP135F-DK为例&#xff0c;讲解如何使用STM32CubeMX结合Developer package实现最小系统启动。 1.开发准备 1.1 Developer package准备 a.Developer package下载&#xff1a; ‍https://www.st.com/en/embedded-software/stm32mp1dev.ht…

【Redis】如何实现一个合格的分布式锁

文章目录 参考1、概述2、Redis粗糙实现3、遗留问题3.1、误删情况3.2、原子性保证3.3、超时自动解决3.4、总结 4、Redis实现优缺5、集群问题5.1、主从集群5.2、集群脑裂 6、RedLock7、Redisson7.1、简单实现7.2、看门狗机制 参考 Redisson实现Redis分布式锁的N种姿势 (qq.com)小…

如何评判算法好坏?复杂度深度解析

如何评判算法好坏&#xff1f;复杂度深度解析 1. 算法效率1.1 如何衡量一个算法好坏1.2 算法的复杂度 2 时间复杂度2.1 时间复杂度的概念2.1.1 实例 2.2 大O的渐进表示法2.3 常见时间复杂度计算举例 3 空间复杂度4 常见复杂度对比5 结尾 1. 算法效率 1.1 如何衡量一个算法好坏 …

接口自动化测试要做什么?8个步骤讲的明明白白(小白也能看懂系列)

先了解下接口测试流程&#xff1a; 1、需求分析 2、Api文档分析与评审 3、测试计划编写 4、用例设计与评审 5、环境搭建&#xff08;工具&#xff09; 6、执行用例 7、缺陷管理 8、测试报告 那"接口自动化测试"怎么弄&#xff1f;只需要在上篇文章的基础上再梳理下就…

Web3.0实战(02)-联盟链入门讲解

联盟链是介于公有链和私有链之间&#xff0c;具备部分去中心化的特性。 联盟链是由若干机构联合发起&#xff0c;由盟友共同来维护&#xff0c;它只针对特定某个群体的成员和有限的第三方开放。 8.1 部分去中心化 联盟链只属于联盟内部的成员所有&#xff0c;联盟链的节点数…

SpringBoot整合Elasticsearch

SpringBoot整合Elasticsearch SpringBoot整合Elasticsearch有以下几种方式&#xff1a; 使用官方的Elasticsearch Java客户端进行集成 通过添加Elasticsearch Java客户端的依赖&#xff0c;可以直接在Spring Boot应用中使用原生的Elasticsearch API进行操作。参考文档 使用Sp…

为什么要学框架?什么是Spring?

为什么要学框架&#xff1f;什么是Spring&#xff1f; 一、为什么要学框架&#xff1f; 学习框架相当于从 “小作坊” 到 “工厂” 的升级&#xff0c;小作坊什么都要自己做&#xff0c;工厂是组件式装配&#xff0c;特点就是高效。框架更加易用、简单且高效。 框架的优点展…

7.26 作业 QT

1.继续完善登录框&#xff0c;当登录成功时&#xff0c;关闭登录界面&#xff0c;跳转到新的界面中&#xff1a; 结果图&#xff1a; second.h: #define SECOND_H#include <QWidget> #include<QDebug> //信息调试类&#xff0c;用于打印输出的 #inc…

【C语言初阶】指针篇—上

目录 1. 指针是什么&#xff1f;2. 指针和指针类型2.1 指针-整数2.2 指针的解引用 3. 野指针3.1 野指针成因1. 指针未初始化2. 指针越界访问3. 指针指向的空间释放 3.2 如何规避野指针 1. 指针是什么&#xff1f; 指针是什么&#xff1f; 指针理解的2个要点&#xff1a; > 1…

【Nodejs】Express模板使用

1.Express脚手架的安装 安装Express脚手架有两种方式&#xff1a; 使用express-generator安装 使用命令行进入项目目录&#xff0c;依次执行&#xff1a; cnpm i -g express-generator可通过express -h查看命令行的指令含义 express -hUsage: express [options] [dir] Optio…

spring eurake中使用IP注册

在开发spring cloud的时候遇到一个很奇葩的问题&#xff0c;就是服务向spring eureka中注册实例的时候使用的是机器名&#xff0c;然后出现localhost、xxx.xx等这样的内容&#xff0c;如下图&#xff1a; eureka.instance.perferIpAddresstrue 我不知道这朋友用的什么spring c…

【Redis】高级篇: 一篇文章讲清楚Redis的单线程和多线程

目录 面试题 Redis到底是多线程还是单线程&#xff1f; 简单回答 详解 Redis的“单线程” Redis为什么选择单线程&#xff1f; 后来Redis为什么又逐渐加入了多线程特性&#xff1f; Redis为什么快&#xff1f; 回答 IO多路复用 Unix网络编程的5种IO模型 主线程和IO…

常见面试题之常见技术场景

1. 单点登录这块怎么实现的&#xff1f; 1.1 概述 单点登录的英文名叫做&#xff1a;Single Sign On&#xff08;简称 SSO &#xff09;&#xff0c;只需要登录一次&#xff0c;就可以访问所有信任的应用系统。 在以前的时候&#xff0c;一般我们就单系统&#xff0c;所有的…

DSA之查找(1):线性表的查找

文章目录 0 知识回顾1 查找1.1 查找的概念 2 线性表的查找2.1 顺序查找2.1.1 顺序查找算法2.1.2 顺序查找的性能分析2.1.3 顺序查找的特点 2.2 折半查找&#xff08;二分&#xff09;2.2.1 折半查找算法2.2.2 折半查找的性能分析2.2.3 折半查找的特点 2.3 分块查找2.3.1 分块查…

0基础系列C++教程 从0开始 第二课

0基础系列C教程 从0开始 第二课来了&#xff01; 复习第一课内容 1 怎么输出数字“1919810”&#xff1f; 答案&#xff08;关键语句&#xff09;: cout<<"1919810"; 2 怎么输出字符串“Hello World”&#xff1f; 答案&#xff08;关键语句&#xff09;&a…