uni-app多端开发

uni-app 多端开发

  • 一、命令创建uni-app 项目
  • 二、在微信小程序后台找到 appId 填写 appId
  • 三、运行项目
  • 四、使用 uni-ui
    • 4-1、下载
    • 4-2、自动导入
    • 4-3、ts项目下载类型校验 (uni-ui 组件库)
      • 4-3-1、下载
      • 4-3-2、配置
  • 五、持久化 pinia
  • 六、数据请求封装
  • 七、获取组件的实例类型
  • 八、上拉加载更多

开场白: 要是在 vscode 书写代码, 需要添加 几个插件来支持 uni-app
在这里插入图片描述

一、命令创建uni-app 项目

npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project

二、在微信小程序后台找到 appId 填写 appId

三、运行项目

运行命令: pnpm dev:mp-weixin,会生成dist 文件目录,导入到微信开发者工具查看

四、使用 uni-ui

官网地址:uni-app 官网 使用uni-ui

4-1、下载

npm i @dcloudio/uni-ui   或   yarn add @dcloudio/uni-ui

4-2、自动导入

// pages.json
{
	// 自动导包配置
	"easycom": {
		"autoscan": true,
		"custom": {
			// uni-ui 规则如下配置
			"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
		}
	},
	
	// 其他内容
	pages:[
		// ...
	]
}

4-3、ts项目下载类型校验 (uni-ui 组件库)

uni-helper/uni-ui-types
后面的所有的点击事件对象都可以用 UniHelper 提供的类型

<swiper @change="onChange">
	<swiper-item>...</swiper-item>
	<swiper-item>...</swiper-item>
</swiper>

// js
const onChange: UniHelper.SwiperOnChange = (event) => {
	//  UniHelper.SwiperOnChange  这样 event 里面的所有的类型都有了
}

4-3-1、下载

pnpm i -D uni-helper/uni-ui-types

4-3-2、配置

在 tsconfig.json 文件中 compilerOptions 配置上

"compilerOptions": {
   "allowJs": true,
    "sourceMap": true,
    "baseUrl": ".",
    "paths": {
        "@/*": ["./src/*"]
    },
    "lib": ["esnext", "dom"],
    "types": [
        "@dcloudio/types",
        "miniprogram-api-typings",
        "@uni-helper/uni-app-types",
        "@uni-helper/uni-ui-types"   // 配置的uni-ui类型,书写标签时,鼠标划上之后有代码提示
    ]
},

五、持久化 pinia

pinia 的使用和 vue3 一样 pinia配置,只是持久化的时候需要改一下

// TODO: 持久化
{
     persist: {
         storage: {
             getItem(key) {
                 return uni.getStorageSync(key)
             },
             setItem(key, value) {
                 uni.setStorageSync(key, value)
             },
         },
     },
 },

六、数据请求封装

utils包里面创建 http.ts 文件

// http.ts

import { useMemberStore } from '@/stores'  // store 取 token

const baseUrl = 'https://pcapi-xiaotuxian-front-devtest.itheima.net'

// 拦截器
const httpInterceptor = {
    // 拦截前触发
    invoke(options: UniApp.RequestOptions) {
        options.url = baseUrl + options.url
        options.timeout = 10000
        options.header = {
            ...options.header,
            'source-client': 'miniapp',
        }
        const memStore = useMemberStore()
        const token = memStore.profile?.token
        if (token) {
            options.header.Authorization = token
        }
    },
}
// 添加 request 请求拦截 和 文件上传拦截
uni.addInterceptor('request', httpInterceptor)
uni.addInterceptor('uploadFile', httpInterceptor)

// 封装响应
interface Data<T> {
    code: string
    message: string
    result: T
}
export const http = <T>(options: UniApp.RequestOptions) => {  // http 函数接受 泛型<T>,由调用 http 函数地方传进来
    return new Promise<Data<T>>((resolve, reject) => {  // Promise 响应数据进行泛型约束,Data 在上面定义好了,只有 result 类型会变化,所以从 http 函数调用者传进来
        uni.request({
            ...options,
            success(response) {
                if (response.statusCode >= 200 && response.statusCode < 300) {
                    resolve(response.data as Data<T>)
                } else {
                    uni.showToast({ icon: 'none', title: '请求错误' })
                    reject(response)
                }
            },
            fail(err) {
                uni.showToast({ icon: 'none', title: '服务器异常' })
                reject(err)
            },
        })
    })
}

在 api / index.ts 目录下

import { http } from '@/utils/http'

/**
 * 首页轮播图
 * @param distributionSite 区分首页还是分类页面
 * @returns promise
 */
export const getHomeBannerAPI = (data: Banner ) => {
    return http<BannerItem[]>({
        url: '/home/banner',
        method: 'GET',
        data
    })
}

在组件中正常使用就好了

七、获取组件的实例类型

<Son ref='sonComponent' />

const sonComponent = ref<InstanceType<typeof Son>>()  // typeof xxx 组件类型  InstanceType 获取的是实例类型

sonComponent.value.getMore  // 父组件拿到子组件的属性和方法

子组件需要暴露出来(vue3中)

defineExpose({
    getMore: getGuessData   // 前面定义的名字,让父组件拿到, 后面是子组件中的属性和方法
})

八、上拉加载更多

// 分页参数
const params = {
	currrentPage: 1,
	pageSize: 10
}
// 定义的数组
const tableDataList = ref([])
// 是否加载完数据
const isFinish = ref(false)
// 加载中状态
let isLoading = false
// 页面和加载更多方法
const getDataList = async (params) => {
	if(isLoading || isFinish.value) return   // 加载中或者数据没有加载完, 都不进行请求数据
	isLoading = true   // 请求数据制成 true
	const res = await API(params)
	tableDataList.value = [...tableDataList.value, res.result.list]   // 数据拼接
	isLoading = false   // 数据回来,加载中的状态制成 false

	// 判断要是当前的页码大于等于列表数据的总页码,停止加载(数据加载完了)
	if(params.currentPage >= res.result.pages) {
		isFinish.value = true  // 数据加载完了
		return uni.showToast({title: "数据加载完了", icon: "none"})
	}

	params.currentPage++  // 加载下一页的数据
}

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

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

相关文章

C++day6作业

1.思维导图 2.编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&am…

Spring笔记(四)(黑马)(web层解决方案-SpringMVC)

01、Spring MVC 简介 1.1 SpringMVC概述 SpringMVC是一个基于Spring开发的MVC轻量级框架&#xff0c;Spring3.0后发布的组件&#xff0c;SpringMVC和Spring可以无 缝整合&#xff0c;使用DispatcherServlet作为前端控制器&#xff0c;且内部提供了处理器映射器、处理器适配器…

OpenTiny Vue 组件库支持 Vue2.7 啦!

之前 OpenTiny 发布了一篇 Vue2 升级 Vue3 的文章。 &#x1f596;少年&#xff0c;该升级 Vue3 了&#xff01; 里面提到使用了 ElementUI 的 Vue2 项目&#xff0c;可以通过 TinyVue 和 gogocode 快速升级到 Vue3 项目。 有朋友评论替换button出错了&#xff0c;并且贴出了…

Java进阶(垃圾回收GC)——理论篇:JVM内存模型 垃圾回收定位清除算法 JVM中的垃圾回收器

前言 JVM作为Java进阶的知识&#xff0c;是需要Java程序员不断深度和理解的。 本篇博客介绍JVM的内存模型&#xff0c;对比了1.7和1.8的内存模型的变化&#xff1b;介绍了垃圾回收的语言发展&#xff1b;阐述了定位垃圾的方法&#xff0c;引用计数法和可达性分析发以及垃圾清…

基于指数分布算法的无人机航迹规划-附代码

基于指数分布算法的无人机航迹规划 文章目录 基于指数分布算法的无人机航迹规划1.指数分布搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用指数分布算法来优化无人机航迹规划。 …

阿里云服务器密码在哪查看?如何设置修改初始密码?

阿里云服务器创建后没有默认初始密码&#xff0c;需要用户通过重置实例密码的方式来设置新的密码&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云服务器ECS重置实例密码的详细操作流程&#xff1a; 阿里云服务器重置密码方法 1、登录到阿里云服务器管理控制台 2、左侧…

乐园要吸引儿童还是家长?万达宝贝王2000万会员的求精之路

2023年6月&#xff0c;万达宝贝王正式迈入“400店时代”。 万达宝贝王在全国200多座城市&#xff0c;以游乐设施、主题活动、成长课程服务10亿多用户&#xff0c;拥有2000多万名会员&#xff0c;是真正的国内儿童乐园领跑者。 当流量时代变成“留量”时代&#xff0c;用户增长…

按键精灵中的UI界面操作

1. 按键精灵中UI界面常用的控件 1. 文字框 界面1: {标签页1:{文字框:{名称:"文字框1",显示内容:"显示内容",文字大小:0,高度:0,宽度:0,注释:"文字大小、高度、宽度是可选属性&#xff0c;如需使用默认值&#xff0c;可保持值为0或直接删除此属性&qu…

汽车制造业,通常都穿用哪些防护功能的劳保鞋呢?

近年来汽车行业发展迅速&#xff0c;各家各户有条件的话都会买车&#xff0c;汽车已经成为人们主要出行工具。随着人们生活水平的提高&#xff0c;汽车市场需求持续增长&#xff0c;现在的汽车制造厂也是越来越多&#xff0c;使得汽车制造业成为机械行业的重要支柱之一。 那么对…

【深度学习】可交互讲解图神经网络GNN

在正式开始前&#xff0c;先找准图神经网络GNN(Graph Neural Network)的位置。 图神经网络GNN是深度学习的一个分支。 深度学习的四个分支对应了四种常见的数据格式&#xff0c;前馈神经网络FNN处理表格数据&#xff0c;表格数据可以是特征向量&#xff0c;卷积神经网络CNN处理…

Spark大数据应用实战

系列文章目录 送书第一期 《用户画像&#xff1a;平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 送书第四期 《AI时代项目经理成长之道》 …

昇腾CANN 7.0 黑科技:DVPP硬件加速训练数据预处理,友好解决Host CPU预处理瓶颈

在NPU/GPU上进行模型训练计算&#xff0c;为了充分使用计算资源&#xff0c;一般采用批量数据处理方式&#xff0c;因此一般情况下为提升整体吞吐率&#xff0c;batch值会设置的比较大&#xff0c;常见的batch数为256/512&#xff0c;这样一来&#xff0c;对数据预处理处理速度…

第十五章,输入输出流代码

package 例题;import java.io.File;public class 例题1 {public static void main(String[] args) {//创建文件对象File file new File("D:\\Java15-1.docx");//判断&#xff0c;如果该文件存在。exists存在的意思if (file.exists()) {//删除//file.delete();//Syst…

Modbus协议简介及模拟环境搭建

Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议&#xff0c;Modbus 是MODICON公司&#xff08;现为施耐德电气公司的一个品牌&#xff09;最先倡导的一种软的通讯规约。 通过此协议&#xff0c;控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进…

【JavaEE】HTTP协议(什么是HTTP?、HTTP格式、form表单和ajax构造HTTP)

一、什么是HTTP协议&#xff1f; 1.1 HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议 1.2 理解HTTP协议的工作过程 当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就…

Python基础入门----Python模块和包:导入模块、创建自己的模块和包

文章目录 Python模块和包:导入模块、创建自己的模块和包导入模块创建自己的模块创建包使用相对导入Python模块和包:导入模块、创建自己的模块和包 Python是一种功能强大的编程语言,它的模块和包系统是其强大功能的基石之一。在Python中,模块是包含Python定义和声明的文件。…

新功能案例分享丨DolphinDB 与你相约上海,报名限时开放!

这一次 D-Day 系列活动来到了上海&#xff0c;DolphinDB 将联合华金证券&#xff0c;以 “ DolphinDB 新功能及私募行业案例分享” 为主题&#xff0c;为大家带来一场精彩的线下主题交流。快点击链接报名本次活动吧~ 活动时间&#xff1a;11月16日下午13:30 活动地点&#xf…

出口美国操作要点汇总│走美国海运拼箱的注意事项│箱讯科技

01服务标准 美国的货物需要细致的服务&#xff0c;货物到港后的服务也是非常重要的。如果在货物到港15天内&#xff0c;如果没有报关行进行(PROCEED)&#xff0c;货物就会进入了G.O.仓库&#xff0c;G.O.仓库的收费标准是非常高的。 02代理资格审核 美国航线除了各家船公司&a…

深入理解 Django 模板系统

概要 在任何 Web 开发过程中&#xff0c;渲染和展示数据是不可或缺的一部分。Django 作为一个高效的 Python Web 框架&#xff0c;提供了一个强大且灵活的模板系统。本文将详细介绍 Django 模板系统的核心概念、语法和高级功能。 一、Django 模板系统简介 Django 的模板系统允…

机器视觉人体跌倒检测系统 - opencv python 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…