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

news2024/12/29 9:26:12

前言
工具: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可能不支持 需要小伙们自己去测试,最好使用条件编译符去处理)

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

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

相关文章

【笔试强训选择题】Day29.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&#xff…

rsync—远程同步

目录 一&#xff1a;rsync概述 1.1rsync简介 1.2rsync同步方式 二&#xff1a;rsync特性 三&#xff1a;rsync同步源 四&#xff1a;rsync与cp、scp对比 五&#xff1a;常用rsync命令 六&#xff1a;rsync本地复制实例 七&#xff1a;配置源的俩种表示方法 八&#x…

[NLP]Huggingface模型/数据文件下载方法

问题描述 作为一名自然语言处理算法人员&#xff0c;hugging face开源的transformers包在日常的使用十分频繁。在使用过程中&#xff0c;每次使用新模型的时候都需要进行下载。如果训练用的服务器有网&#xff0c;那么可以通过调用from_pretrained方法直接下载模型。但是就本人…

安全DNS,状态码,编码笔记整理

一 DNS DNS&#xff08;Domain Name System&#xff09;是互联网中用于将域名转换为IP地址的系统。 DNS的主要功能包括以下几个方面&#xff1a; 域名解析&#xff1a;DNS最主要的功能是将用户输入的域名解析为对应的IP地址。当用户在浏览器中输入一个域名时&#xff0c;操作…

工程安全监测无线振弦采集仪在建筑物中的应用

工程安全监测无线振弦采集仪在建筑物中的应用 工程安全监测无线振弦采集仪是一种用于建筑物结构安全监测的设备&#xff0c;它采用了无线传输技术&#xff0c;具有实时性强、数据精度高等优点&#xff0c;被广泛应用于建筑物结构的实时监测和预警。下面将从设备的特点、应用场…

力扣热门100题之接雨水【困难】

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3…

如何使用GPT作为SQL查询引擎的自然语言

​生成的AI输出并不总是可靠的&#xff0c;但是下面我会讲述如何改进你的代码和查询的方法&#xff0c;以及防止发送敏感数据的方法。与大多数生成式AI一样&#xff0c;OpenAI的API的结果仍然不完美&#xff0c;这意味着我们不能完全信任它们。幸运的是&#xff0c;现在我们可以…

Packet Tracer – 配置动态 NAT

Packet Tracer – 配置动态 NAT 拓扑图 目标 第 1 部分&#xff1a;配置动态 NAT 第 2 部分&#xff1a;验证 NAT 实施 第 1 部分&#xff1a; 配置动态 NAT 步骤 1&#xff1a; 配置允许的流量。 在 R2 上&#xff0c;为 ACL 1 配置一个语句以允许属于 172.16.0.…

【JVM】浅看JVM的运行流程和垃圾回收

1.JVM是什么 JVM&#xff08; Java Virtual Machine&#xff09;就是Java虚拟机。 Java的程序都运行在JVM中。 2.JVM的运行流程 JVM的执行流程&#xff1a; 程序在执行之前先要把java代码转换成字节码&#xff08;class文件&#xff09;&#xff0c;JVM 首先需要把字节码通过…

Visio/PPT/Matlab输出300dpi以上图片【满足标准投稿要求】

1. visio 遵照如下输出选项&#xff0c;另存为tif格式文件时&#xff0c;选择正确输出便是300dpi以上 2. matlab 文件选项选中导出设置&#xff0c;在渲染中选择dpi为600&#xff0c;导出图片即可&#xff0c;科研建议选择tif格式文件 3.ppt 打开注册表&#xff0c;winr键…

【报错】在python3.9环境下安装sqlmap报错

问题描述 报错内容&#xff1a; missing one or more core extensions (‘ssl’, ‘sqlite3’) most likely because current version of Python has been built without appropriate dev packages 原因分析&#xff1a; 缺少一个或多个核心扩展&#xff08;‘ssl’、‘sqlit…

常见的栈溢出StackOverFlow 与 内存溢出OutOfMemory的区别

0、前言&#xff1a;内存模型 对于多线程运行情况下的jvm内存&#xff0c;我们应当知道&#xff1a; 每创建一个线程&#xff0c;jvm就会为其分配一块线程私有的工作内存&#xff0c;其中包括程序计数器、栈&#xff0c;等等。 对于每一个线程私有的栈&#xff0c;当线…

怎么限制文件打开次数、打开时间?

一些公司出于业务需求&#xff0c;可能会给客户或者合作伙伴发一些涉密图纸、文档、文件等重要文件&#xff0c;但是又不想文件被外发泄露随意传播&#xff0c;今天就教大家一个方法限制文件外发后别人打开这个文件的打开次数、打开时间、另存为等操作。 设置方法 本篇文章测试…

page _refcount和_mapcount字段

linux page有两个非常重要的引用计数字段_refcount和_mapcount&#xff0c;都是atomic_t类型&#xff0c;其中&#xff0c;_refcount表示内核中应用该page的次数。当_refcount 0时&#xff0c;表示该page为空闲或者将要被释放。当_refcount > 0&#xff0c;表示该page页面已…

APP-脱壳+反编译

APP反编译加固-自动查壳脱壳 为什么要脱壳&#xff1f; 因为不脱壳无法进行反编译 查壳工具&#xff1a;https://pan.baidu.com/s/1rDfsEvqQwhUmep1UBLUwSQ 密码: wefd 脱壳工具&#xff1a;https://github.com/CodingGay/BlackDex 查壳演示&#xff1a; 使用Java运行jar包&a…

浙江大学软件学院2022保研经历分享

首先&#xff0c;我想强调一点&#xff0c;如果我们只是一个普通的非211&#xff0c;985的本科生&#xff0c;一定要参加浙江大学每年7月份组织的夏令营&#xff0c;因为浙大的夏令营是一个海王营&#xff0c;基本上不会对入营的学生做筛选&#xff0c;但是要想获得优秀营员&am…

pandas笔记:groupby整理

0 数据集 # Visual Python: Data Analysis > File vp_df pd.read_csv(https://raw.githubusercontent.com/visualpython/visualpython/main/visualpython/data/sample_csv/fish.csv) vp_df 1 单列聚合 vp_df.groupby(Type)[Kg].mean()Type mackerel 1.417456 salmon…

【C语言项目】三子棋

文章目录 项目思路一、分文件进行创建二、进入游戏前的目录2.1 目录的功能&#xff1a;2.2 目录界面&#xff1a;2.3 选择进入或退出游戏2.4 多次重玩功能 三、画出棋盘3.1 写出棋子3.2 初始化棋盘3.2 画出棋盘的框架3.3 代码实现 四、玩家落子4.1 落子逻辑4.2具体情况分类讨论…

初识C++(下)——“C++”

各位CSDN的uu们你们好呀&#xff0c;今天终于是小雅兰的初识C的下的文章啦&#xff0c;下面&#xff0c;让我们进入C的世界吧&#xff01;&#xff01;&#xff01; 内联函数 我们首先得知道&#xff1a;C中的内联函数是用来解决C语言中宏的坑的&#xff01;&#xff01;&…