vue3 + uniapp + ts 拓展全局类型处理

背景:

我们在使用uniapp + ts开发中,由于在vue3中this问题带来的全局挂在不是那么好实现,例如我们开发了一些通用工具函数,每次使用的时候都要引入很麻烦,就想到this不可用,可使用uni来挂在,uni也是一个全局对象,是对象就可以拓展,在uni上挂在新的属性或方法很容易,问题是怎么处理ts的类型检查报错和使用api提示呢?

处理:

本人在遇到此问题时,看了下网上别人的处理方式(大家可自行百度),没有一个比较简单可用,于是乎就自己搞了,顺便在此记录分享一下,万一有人也很需要呢

1. src目录下创建types文件夹,用户存放通用类型声明文件,在创建的types文件夹下创建global.d.ts类型声明文件

2.在sconfig.json文件中将声明文件包含进去

{
  "extends": "@vue/tsconfig/tsconfig.json",
  "compilerOptions": {
    "target": "ESNext",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "moduleResolution": "Node",
    "strict": true,
    "jsx": "preserve",
    "sourceMap": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "esModuleInterop": true,
    "lib": ["ESNext", "DOM"],
    "skipLibCheck": true,
    "types": ["vite/client", "@dcloudio/types", "@uni-helper/uni-app-types", "@uni-helper/uni-cloud-types", "@uni-helper/uni-ui-types"],
    "strictNullChecks": true,
    "ignoreDeprecations": "5.0",


    "baseUrl": "./", // 解析非相对模块的基础地址,默认是当前目录
    "paths": {
      // 路径映射,相对于baseUrl
      "@/*": ["src/*"]
    }
  },

  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/components/table/.vue.ts"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

3.在创建的global.d.ts里愉快的添加类型

import type { Uni as _Uni } from '@dcloudio/types';

declare global {
  /**
   *拓展全局变量Uni
   */
  interface Uni extends _Uni {
    $u: {
      loading(show: boolean, title?: string): void;
      toast(title: string): void;
    };
  }
}

4.在src/utils里定义和挂载实现

 

/**
 * 展示加载效果
 *
 * @param show 是否展示
 * @param title 提示信息
 */
function loading(show: boolean, title = '加载中...') {
  if (show) {
    uni.showLoading({ title });
  } else {
    uni.hideLoading();
  }
}

/**
 * 展示提示消息
 *
 * @param title 提示消息
 */
function toast(title: string) {
  uni.showToast({
    icon: 'none',
    title
  });
}

/**
 * 挂在uni简化方案
 */
export default {
  install() {
    if (!uni || typeof uni !== 'object') return;
    uni.$u = {
      loading,
      toast
    };
  }
};

5.实现后记得引用一下(初始化挂载)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3+uni-app实现微信小程序登录流程主要分为以下步骤: 1. 在uni-app项目中安装并引入微信小程序登录插件(如wxlogin),在main.js中初始化并配置插件参数。 2. 创建一个登录页面,该页面包含点击按钮触发微信登录的操作,可以通过uni.login()方法调用微信小程序登录接口获取code。 3. 接收到微信小程序登录接口返回的code后,将code发送给后端服务器,后端服务器将code和小程序的App ID以及App Secret发送给微信服务器进行登录凭证校验,获取到session_key和openid。 4. 服务器根据openid和session_key生成一个自定义的token,返回给前端。 5. 前端将token保存在本地,使用uni.setStorage()方法进行存储,以便后续的登录状态维持和接口请求验证。 6. 在需要登录验证的页面或组件中,通过uni.getStorage()方法获取本地存储的token,并将token添加到请求头中,发送给后端服务器进行接口请求。 7. 后端服务器接收到带有token的请求,对token进行校验和解析,验证token是否有效,从而确保用户的登录状态。 总结:通过以上步骤,实现了Vue3+uni-app微信小程序的登录流程。用户通过点击按钮触发微信小程序登录接口,后端服务器校验登录凭证,生成token并返回给前端前端保存token并在请求接口时携带token进行验证,保证了用户的登录状态和接口访问权限的安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值