Uniapp 开发 ①(快速上手)

news2024/9/23 21:27:50

请添加图片描述

@作者 : SYFStrive

 
请添加图片描述

@博客首页 : HomePage

📜: 微信小程序

📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

📌:觉得文章不错可以点点关注 👉:专栏连接🔗

💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞

请添加图片描述
相关专栏

👉 微信小程序(🔥)
👉 UNIAPP开发(🔥)

目录

  • 前言
  • 所需NPM包
  • @dcloudio/uni-ui 配置easycom
  • 使用官方提供的CLI模板
    • 安装和初始化UNIAPP
  • 网络请求Promise化封装
    • 1. 文件目录规范
    • 2. 封装请求拦截器
    • 3. 使用 API
  • Vue3 将数据挂载上全局对象 And 获取全局对象数据
  • Vue3 对 vuex进行二次封装
    • 封装代码
    • Store管理
  • 最后

前言

现在,越来越多的人逐渐接受使用TypeScript开发Vue项目的方式。同时,Uni-app作为跨平台开发框架变得越来越受欢迎。Vue3也上市了,提供了许多有用的新功能。Vite是对现代化前端工具的新尝试,它提供了一种新的打包方式,与webpack不同,它使用了浏览器本身更简单的javascript导入。本文将基于Unu-app、Vue3、TypeScript和Vite为基础,搭建一项目。

所需NPM包

npm install axios sass node-sass vuex @dcloudio/uni-ui
npm install axios sass node-sass pinia @dcloudio/uni-ui

@dcloudio/uni-ui 配置easycom

官方连接 : https://uniapp.dcloud.net.cn/co
说明 :使用 npm 安装好 uni-ui 之后,需要配置 easycom 规则,让 npm 安装的组件支持 easycom

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

在这里插入图片描述

使用官方提供的CLI模板

安装和初始化UNIAPP

  1. 首先,我们需要安装uni-app。可以使用以下命令进行安装 👇

命令 npm install -g @vue/cli

  1. 接下来,我们通过Vue CLI创建一个基于uni-app的项目:

vue create -p dcloudio/uni-preset-vue my-project

这里可能报错,需要把 github uni-preset-vue 下载到本地然后替换 👇
uni-preset-vue 地址 : https://github.com/dcloudio/uni-preset-vue
替换的路劲 :vue create -p D:\uni-preset-vue my-project
参考官方 : https://uniapp.dcloud.net.cn/quickstart5

在这里插入图片描述

网络请求Promise化封装

1. 文件目录规范

在这里插入图片描述

2. 封装请求拦截器

封装请求拦截器 ~ 代码演示

// 引入axios
import axios from "axios";

let requests = axios.create({
	//基础路径
	baseURL: "/api",
	//请求不能超过3S
	timeout: 3000,
});

// 请求拦截器
requests.interceptors.request.use((config) => {
	config.header = {}
	return config
}, error => { // 可使用async await 做异步操作
	return Promise.reject(error)
})

// 响应拦截器
requests.interceptors.response.use((res) => {
	if (response.data.code === 200) {
		// XXX
	} else if (response.data.code === 401) {
		// XXX
		return Promise.reject(response.data)
	}else{
		// XXX
		return Promise.reject(response.data)
	}
	return res.data
}, error => {
	return Promise.reject(error)
})
export default requests;

3. 使用 API

使用 ~ 代码演示

// 引入request ajax请求
import requestsAjax from "./Ajax/ajax";

// 获取数据
export const GetData = () => {
    return requestsAjax({ url: '地址', method: '请求方式' })
}

Vue3 将数据挂载上全局对象 And 获取全局对象数据

~ 注意 支持H5,不支持小程序

  • 这里我单独创建了脚本用于挂载全局数据 RegisterGlobalData

专门用来注挂载全局数据脚本 ~ 代码演示

import axios from "axios";
import * as echarts from 'echarts'
import mitt from 'mitt'

const GlobalObj = {
    axios,
    echarts,
    $bus:new mitt()
}

const GlobalRegisterData = (app)=>{
    app.config.globalProperties = GlobalObj
}

export default GlobalRegisterData
  • 对应的获取数据脚本 GetGlobalData

获取数据脚本全局数据脚本 ~ 代码演示

import {getCurrentInstance} from 'vue'

const GetGlobalData = () => {
    let {appContext:{config:{globalProperties}}} = getCurrentInstance()
    return globalProperties
}

export default GetGlobalData
  • Main 注册

在这里插入图片描述

Vue3 对 vuex进行二次封装

封装代码

hooks/VueX ~ 代码演示

import {useStore} from 'vuex'
import {computed, onMounted, reactive, ref} from 'vue'
import {mapActions, mapMutations, mapState, mapGetters} from 'vuex'

let store = null

const initialize = ()=>{
	if (store === null) store = useStore() //获取到store对象
}

const mapActionsFun = (mapper) => {
    if (store === null) store = useStore() //获取到store对象
    const storeActionsFns = mapActions(mapper)
    const actionsData = {}
    const thisObj = {$store: store}
    Object.keys(storeActionsFns).forEach(item => {
        const fn = storeActionsFns[item].bind(thisObj) //给函数绑定this
        actionsData[item] = fn
    })
    return actionsData
}

const mapMutationsFun = (mapper) => {
    if (store === null) store = useStore() //获取到store对象
    const storeMutationsFns = mapMutations(mapper)
    const mutationsData = {}
    const thisObj = {$store: store}
    Object.keys(storeMutationsFns).forEach(item => {
        const fn = storeMutationsFns[item].bind(thisObj) //给函数绑定this
        mutationsData[item] = fn
    })
    return mutationsData
}
const mapStateFun = (mapper) => {
    if (store === null) store = useStore() //获取到store对象
    const storeStateFns = mapState(mapper)
    const storeData = {}
    const thisObj = {$store: store}
    Object.keys(storeStateFns).forEach(item => {
        const fn = storeStateFns[item].bind(thisObj) //给函数绑定this
        storeData[item] = computed(fn)
    })
    return storeData
}
const mapGetterFun = (mapper) => {
    if (store === null) store = useStore() //获取到store对象
    const storeGettersFns = mapGetters(mapper)
    const getterData = {}
    const thisObj = {$store: store}
    Object.keys(storeGettersFns).forEach(item => {
        const fn = storeGettersFns[item].bind(thisObj) //给函数绑定this
        getterData[item] = computed(fn)
    })
    return getterData
}

export {
	initialize,
    mapActionsFun,
    mapMutationsFun,
    mapStateFun,
    mapGetterFun,
}

Store管理

在这里插入图片描述

Store ~ 代码演示

import { createStore } from 'vuex'

//导入store模块
import login from './login/index.js'

const stores = createStore({
    modules: {
		login,
    }
})

export default stores

login ~ 代码演示

// 引入ShopCart请求服务器数据
import {} from '@/api/api'

const actions = {

}
const mutations = {

}
const state = {
	
}
const getters = {

}

export default {
    actions, mutations, state, getters
}

最后

在这里插入图片描述
本文到这里就结束了,大佬们的支持是我持续更新的最大动力,希望这篇文章能帮到大家💪

 

                 相关专栏连接🔗

在这里插入图片描述

下篇文章再见ヾ( ̄▽ ̄)ByeBye

在这里插入图片描述

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

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

相关文章

Vue3在工作中使用的一些经验总结

1、隐藏el-tab-pane 设置隐藏 2、Vue中ref的使用 3、Vue中的api 4、component: () > import(‘/views/order/orderDetail‘), 5、ids selections.map((i) > i.ruleId); 6、路由配置的三种方式 项目中使用到的 7、Vue3新特性 8、template在Vue中的作用 9、…

电脑装机后使用Administrator作为电脑账号

目录标题 1 搜索cmd使用管理员权限运行(因为直接winr无法用权限打开)2 输入net user administrator /active:yes,之后系统会提示命令完成,通过这个指令就是让系统默认账户administrator成为超级管理员,方便接下来的操作…

学习mysql

Mysql SQL语言的规则与规范SQL大小写规范注释数据导入指令 基本的SELECT语句SELECT.列的别名去掉重复行空值参与运算着重号(当有表名是关键字时)显示表结构where 运算符算术运算符 比较运算符号性运算符非符号形运算符空运算符非空运算符最小值运算符最大值运算符BETWEEN AND运…

python处理Excel Pandas xlwings numpy, jupyter,docx,jieba 词频统计 flash

# 批量创建Excel import xlwings # xw.App(visibleTrue,add_bookTrue) 会打开Excel,且不会自动关闭 # xw.App(visibleTrue,add_bookTrue) 会打开Excel,但一晃就自动关闭了 app xlwings.App(visibleTrue, add_bookFalse) for language in [Java, Pyt…

C++——set/multiset再理解

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 4. set容器 4.1 set的介绍 4.2 set的使用 5. multiset 5.1 multiset的介绍 5.2 mutiset的使用 1. 关联式容器 先前我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_…

边缘计算技术主要有哪几种?如何应用在实际场景中?

边缘计算是一种新的计算架构,它将计算资源移动到靠近终端用户的边缘设备中,以实现更快、更可靠、更安全的数据传输和处理。边缘AI智能则是指将人工智能算法和模型部署到边缘设备上,使其能够在设备本身上执行计算和决策,而不需要发…

【unity每日一记】资源和场景加载图文详解

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)

1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器…

Netty的零拷贝

技术主题 netty本质上就是一款优秀的网络编程框架,凭借自己基于NIO编程,零拷贝等技术细节, 技术原理 零拷贝机制(zero-copy)是在操作数据时不需要将数据从一块内存复制到另一块内存区域的技术,这样就避免…

Docker学习笔记1

PaaS: 一、虚拟化分类: 虚拟化资源提供者: 1)硬件平台虚拟化 2)操作系统虚拟化 虚拟化实现方式: type I: 半虚拟化 type II:硬件辅助全虚拟化 type III: 软件全虚拟化: …

【编译、链接、装载十】可执行文件的装载与进程

【编译、链接、装载十】可执行文件的装载与进程 一、进程虚拟地址空间1、demo 二、装载的方式1、分页(Paging)2、 页映射 三、从操作系统角度看可执行文件的装载1、进程的建立2、页错误 四、进程虚存空间分布1、ELF文件链接视图和执行视图2、堆和栈 一、…

mdk下堆栈地址相关的知识梳理

mdk中,堆栈地址范围不像在gcc工程中那么容易看出来。过程被mdk隐藏了,单纯从代码层面不好看出来。但是基本的流程是这样的:先确定代码其他部分使用RAM的情况,然后紧跟着已使用的RAM地址,在剩下的RAM地址中分配Stack_Si…

2023 年6月开发者调查统计结果——最流行的技术(1)

2023 年6月开发者调查统计结果——最流行的技术(1) 本文目录: 一、编程、脚本和标记语言 二、数据库 三、云平台 四、网络框架和技术 五、其他框架和库 六、其他工具 七、集成开发环境 八、异步工具 九、同步工具 ​十、操作系统 …

如何在医药行业运用IPD?

医药是关于人类同疾病作斗争和增进健康的科学。它的对象是社会的人。因此,医学与社会科学、医学伦理学具有密切关系。广义的医药行业分为医药工业、医药商业和医疗服务业三大组成部分,其中医药工业包括化学药制剂、原料药、中药饮片、中成药、生物药品、…

chatgpt赋能python:Python有宏定义吗?深入探究

Python有宏定义吗?深入探究 Python语言的高效性以及方便编程的语法,使其成为众多程序员的首选语言。而在编写代码的过程中,宏定义是一个非常有用的编程工具,可以帮助程序员简化代码、提高代码的可读性和可维护性。那么&#xff0…

chatgpt赋能python:Python构造器重载-介绍、实践与准则

Python构造器重载 - 介绍、实践与准则 Python是一种动态强类型编程语言,它支持基于对象的编程范例,这意味着对象被认为是Pyhon编程中的核心概念,同时Python在该领域也有广泛的应用。对于任何一个对象类型,一个类至少需要有一个构造器——它是…

【架构】业务中台应用架构

文章目录 一、什么是业务中台二、为什么需要业务中台三、对于业务中台的认知3.1、微服务不是业务中台3.2、业务中台不是前台应用3.3、业务中台是通用业务机制的实现 一、什么是业务中台 业务中台是以业务领域划分边界,形成高内聚、低耦合的面向业务领域的能力中心&…

SpringCloudAlibaba之Nacos安装指南

SpringCloudAlibaba之Nacos安装指南 文章目录 SpringCloudAlibaba之Nacos安装指南1.Windows安装1.1.下载安装包1.2.解压1.3.端口配置1.4.启动1.5.访问1.6.报错 2.Linux安装2.1.安装JDK2.2.上传安装包2.3.解压2.4.端口配置2.5.启动、关闭 3.Nacos的依赖 1.Windows安装 开发阶段…

STM32G0+EMW3080+阿里云飞燕平台实现单片机WiFi智能联网功能(二)阿里云飞燕平台环境配置

项目描述:该系列记录了STM32G0EMW3080实现单片机智能联网功能项目的从零开始一步步的实现过程;硬件环境:单片机为STM32G030C8T6;物联网模块为EMW3080V2-P;网联网模块的开发板为MXKit开发套件,具体型号为XCH…

C++ Primer 第10章泛型算法

10.1 概述 大多数算法定义在algorithm中,标准库还在头文件numeric中定义了数值泛型算法一般情况下,这些算法并不直接操作容器,而是遍历由两个迭代器指定的一个元素范围来进行操作。find(迭代器1.cbegin(),迭代器2.cend()&#xf…