前言

原因

博友有问,狗哥必答

前段时间,博友加本狗微信,询问uniapp的学习办法。本狗资格肤浅,没有专门学过uniapp,只能将本人日常开发uniapp的根本流程和步骤进行分享,心愿能够略尽绵薄之力。感激如下图所示的博友敌人询问反对,大家的反对才是我提高的能源。


次要指标

实现4大重点

  1. uniapp我的项目搭建流程
  2. uniapp我的项目罕用组件引入形式
  3. uniapp我的项目接口封装策略
  4. uniapp我的项目罕用配置整顿


疾速链接

公众号:JavaDog程序狗

关注公众号,发送 【uniapp】,无任何套路即可取得


猜你喜爱

文章举荐

【我的项目实战】SpringBoot+vue+iview打造一个极简集体博客零碎

【我的项目实战】SpringBoot+uniapp+uview2打造H5+小程序+APP入门学习的聊天小我的项目

【我的项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序

【模块分层】还不会SpringBoot我的项目模块分层?来这手把手教你!

【ChatGPT】手摸手,带你玩转ChatGPT

【ChatGPT】SpringBoot+uniapp+uview2对接OpenAI,带你开发玩转ChatGPT


猜你想问

如何与狗哥分割进行探讨

关注公众号【JavaDog程序狗】,外面蕴含狗哥联系方式有问必答

注释

前置条件

1.HBuilderX

官网IDE下载地址 https://www.dcloud.io/hbuilderx.html

2.npm Node.js 包管理工具

装置Node等相干百度即可,简略易懂

开始

1.关上工具

双击关上HBuilder X


2.创立新我的项目

  • 点击HBuilder X工具左上角【文件】=》【新建】=》【我的项目】

  • 依照我的项目业务起名,如聊天零碎就叫chat-uniapp,博客零碎就叫blog-uniapp,这个中央不强制,集体习惯,本次实例以example-unipp作为我的项目名,抉择默认模板,示例以vue2版本做根底,点击【创立】

  • 初始化我的项目构造如下


    3.引入组件

  • 本狗在uniapp我的项目中,罕用UI库及常用工具引入,小我的项目根本够用,大家可按需加载
插件版本用处
uview-ui^2.0.31多平台疾速开发的UI框架
moment^2.29.4js工具库
uView UI,是全面兼容nvue的uni-app生态框架,其中还蕴含API相干JS函数,不便封装易用。

moment是工夫js工具库,罕用工夫转化格式化等

  • 我的项目根门路新建package.json,配置上述依赖组件

    {"dependencies": {  "moment": "^2.29.4",  "uview-ui": "^2.0.31"}}

  • 我的项目根门路下拉取依赖

    右击我的项目根目录,点击【应用命令行窗口关上所在目录】,或者通过命令行进入我的项目门路都可

npm i

查看胜利拉取依赖

4.组件配置

  • 配置uview
  • App.vue中引入uview的scss
  • main.js中引入uview

    import uView from 'uview-ui'Vue.use(uView)

  1. 将根门路下uni.scss中,将uview的theme.scss 笼罩uniapp默认内置款式

    /* uni.scss */@import 'uview-ui/theme.scss';

  2. 在pages.json中退出easycom

    "easycom": {         "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue" },

  3. 退出uview组件,在/pages/index/index.vue退出简略button组件

    <u-button type="primary" text="测试"></u-button>

  4. 启动我的项目,测试是否引入胜利
    点击【运行】=》【运行到浏览器】=》【chrome】,关上显示button即为胜利


  5. 配置moment
  6. main.js中引入moment
// 引入momentimport moment from 'moment';// 挂载到vue原型上,全局注册Vue.prototype.$moment = moment;

  1. /pages/index/index.vue中引入moment,调试组件
<h3>{{$moment(new Date()).format('yyyy-MM-DD HH:mm:ss')}}</h3>

  1. 查看页面是否引入moment胜利


#### 5.函数封装

  • 环境变量

    理论我的项目会分很多环境,如dev开发环境、local本地环境、prod生产环境等,针对不同环境,其中配置也有不同

在根门路下新建common/config文件包,在包中新建env.js

// prod-生产 dev-开发 local-本地const env = "local"// contextPath门路const contextPath = "example/v1"const prod = {    baseUrl: `https://localhost:9001/${contextPath}`, // 线上环境'}const dev = {    baseUrl: `http://localhost:7001/${contextPath}`, // 开发环境'}const local = {    baseUrl: `http://localhost:8001/${contextPath}`, // 测试环境'}const config = {    dev,    prod,    local,}export default config[env]


挂载vue原型,全局注册config

import config from '@/common/config/env.js'Vue.prototype.$config = config;
  • Http申请

    通常将我的项目中与后盾交互中Http申请做封装

因本我的项目采纳uview为UI组件库,内置很多API函数,间接摘取成熟框架中函数封装即可,如Http申请
https://www.uviewui.com/js/http.html


新建\common\http包,在包中新建request.js

// 此vm参数为页面的实例,能够通过它援用vuex中的变量import env from '@/common/config/env.js'module.exports = (vm) => {    // 初始化申请配置    uni.$u.http.setConfig((config) => {        /* config 为默认全局配置*/        config.baseURL = env.baseUrl; /* 根域名 */        config.custom = { catch: true, auth: true }        return config    })    // 申请拦挡    uni.$u.http.interceptors.request.use((config) => { // 可应用async await 做异步操作        uni.showLoading({            title: '加载中'        });        // 初始化申请拦截器时,会执行此办法,此时data为undefined,赋予默认{}        config.data = config.data || {}        // 依据custom参数中配置的是否须要token,增加对应的申请头        if(config?.custom?.auth) {            // 能够在此通过vm援用vuex中的变量,具体值在vm.$store.state中            //config.header['Access-Token'] = vm.$store.state.token            config.header['Access-Token'] = uni.getStorageSync("access_token")        }        return config    }, config => { // 可应用async await 做异步操作        return Promise.reject(config)    })    // 响应拦挡    uni.$u.http.interceptors.response.use((response) => { /* 对响应胜利做点什么 可应用async await 做异步操作*/        const data = response.data        // 自定义参数        const custom = response.config?.custom        if (data.code !== 200) {            // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提醒            if (custom.toast !== false) {                uni.$u.toast(data.message)            }            // 如果是401受权异样则跳转登录            if(401 == data.code){                uni.removeStorageSync("Access-Token")                uni.removeStorageSync("userInfo")                setTimeout(()=>{                    uni.navigateTo({                        url: '/pages/login/index'                    });                },1000)            }            // 如果须要catch返回,则进行reject            if (custom?.catch) {                return Promise.reject(data)            } else {                // 否则返回一个pending中的promise,申请不会进入catch中                return new Promise(() => { })            }        }        uni.hideLoading();        return data === undefined ? {} : data    }, (response) => {        // 对响应谬误做点什么 (statusCode !== 200)        uni.$u.toast("工程师被UFO带走了-_-!");        return Promise.reject(response)    })}

引入申请封装,将app参数传递到配置中
// 引入申请封装,将app参数传递到配置中require('@/common/http/request.js')(app)


  • API接口

    通常将我的项目中与后盾交互的api接口对立治理

新建\common\api包,在包中新建index.js,其中举例login接口

const http = uni.$u.httpconst api = {    /**     * 登录     */    login(params) {        return http.get('/login', {params})    },}export default api;

挂载vue原型,全局注册api
import api from "@/common/api"Vue.prototype.$api = api;

  • 最终调试

在/pages/index/index.vue退出简略交互,点击按钮调用接口


接口调用胜利,返回值打印

调试胜利后,即可依据业务需要填充内容,丰盛页面,迭代开发


补充

以上流程均是本狗罕用流程不代表规范,大家能够依据习惯自行调整,UI或工具抉择,筛选齐全依赖于性能适宜本人的才是最好的。再啰嗦一句,本狗还是喜爱采纳webstorm进行开发,而后用HBuilderX进行编译,集体爱好,只是举荐。

总结

本文旨在通过本狗平时我的项目开发习惯,总结出一套搭建uniapp的罕用流程。其实重点在于对官网文档的了解,不论什么我的项目,什么框架,只有吃透文档,任何常见的疑难问题都会迎刃而解。心愿宽广博友们在奋笔疾书的搬砖的同时,肯定重视官网文档翻阅和总结

JavaDog狗屋地址
集体博客https://blog.javadog.net
公众号https://mp.weixin.qq.com/s/_vgnXoQ8FSobD3OfRAf5gw
CSDNhttps://blog.csdn.net/baidu_25986059
掘金https://juejin.cn/user/2172290706716775
知乎https://www.zhihu.com/people/JavaDog
简书https://www.jianshu.com/u/1ff9c6bdb916
giteehttps://gitee.com/javadog-net
GitHubhttps://github.com/javadog-net