uni-app进行微信小程序开发,快速上手

news2024/11/18 11:47:55

准备工作

  • IDE

https://www.dcloud.io/hbuilderx.html

  • 微信小程序开发工具

下载 / 稳定版更新日志 (qq.com)

  • 安装流程

  • 打开HBuilderX 点击这个logo打开终端 然后 下载一下终端插件

初始化一个demo

  • 通过vue-cli命令行创建项目

uni-app官网 (dcloud.net.cn) (官方文档)

  • 可视化方式创建

uni-app官网 (dcloud.net.cn) (官方文档)

  • 或者下载一个项目模板

下载仓库 http://DCloud/uni-preset-vue - Gitee.com

我在这里使用了命令行方式创建一个空项目

  • 全局安装 vue-cli(脚手架)

  • 创建uni-appnpx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project

项目目录结构

  • 运行的配置

OK了!!!

demo能够跑起来直接精通了

开始 "实战"

完整前端代码

zql-uniapp · 企业级代码管理平台 (aliyun.com)

目标

主要目标

  • 菜单实现

  • 页面跳转实现(携带参数和不带参数)

  • 登录拿到username和微信头像

  • openId存到pinia

菜单实现

  • 新建页面

新建四个页面之后检查一下再pages.json中是否都注册成功

没有的话 手动写一下

  • 使用tabBar组件创建菜单

通义tongyi.ai_你的全能A

I助手.html(5.2 MB)

- 0%

{
    "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "uni-app"
            }
        },
        {
            "path" : "views/index",
            "style" : 
            {
                "navigationBarTitleText" : ""
            }
        },
        {
            "path" : "pages/login/login",
            "style" : 
            {
                "navigationBarTitleText" : "我的"
            }
        },
        {
            "path" : "pages/about/about",
            "style" : 
            {
                "navigationBarTitleText" : "关羽"
            }
        },

        {
            "path" : "pages/log/log",
            "style" : 
            {
                "navigationBarTitleText" : "log"
            }
        }
    ],


    "tabBar": {
        "backgroundColor": "248,248,248",
        "color": "#000000",
        "selectedColor": "#3cc51f",
        "borderStyle": "black",
        "list": [
            {
                "pagePath": "pages/index/index",
                "text": "首页",
                "iconPath": "static/xinxi.png",
                "selectedIconPath": "static/xinxifill.png"

            },
            {
                "pagePath": "pages/about/about",
                "text": "收藏",
                "iconPath": "static/shoucang.png",
                "selectedIconPath": "static/shoucangfill.png"

            },
            {
                "pagePath": "pages/login/login",
                "text": "我的",
                "iconPath": "static/jingli.png",
                "selectedIconPath": "static/jinglifill.png"
            }


        ]
    },



    "globalStyle": {
        "navigationBarTextStyle": "black",
        "navigationBarTitleText": "uni-app",
        "navigationBarBackgroundColor": "#F8F8F8",
        "backgroundColor": "#F8F8F8"
    }
}

  • 不相关资源

iconfont-阿里巴巴矢量图标库

页面跳转

  • 一个是跳转的组件

navigator | uni-app官网 (dcloud.net.cn)

<navigator :url="'/pages/navigate/navigate?item='+ encodeURIComponent(JSON.stringify(item))"></navigator>

  • 一个是 navigateTo方法

uni.navigateTo({
              url: `/pages/log/log?msg=${(inputValue.value)}`,
              fail: (err) => {
                  console.log(err)
                }
            });

navigateTo的Api

uni.navigateTo(OBJECT) | uni-app官网 (dcloud.net.cn)

  • 携带参数跳转url: `/pages/log/log?msg=${(inputValue.value)}`

  • 目标页面接受参数

onLoad((options) => {      
	console.log(options.msg);      
	msg.value = options.msg;  
});

  • 跳转tabBar页面

const switchTabTo = () => {
		
		uni.switchTab({
			url: '/pages/login/login', //必须在pages.json的tabBar组件注册
			fail: (err) => {
				console.log(err)
			}
		});
	}

index.vue

<template>
    <view class="text-area">
        <input class="custom-input" type="text" v-model="inputValue" placeholder="请在此输入" />
        <view class="button-container">
            <!-- <button @click="switchTabtiaozhuan">switchTab跳转到关于页面</button> -->
            <button type="primary" @click="navigaToLog">方法跳转</button>
        </view>


        <view c">
            <!-- <button type="warn"> -->
                <navigator :url="`/pages/log/log?msg=${(inputValue)}`">组件跳转</navigator>
            <!-- </button> -->
        </view>
    </view>
</template>

<script lang="ts" setup>
    import { onMounted, ref } from 'vue';



    const inputValue = ref('');

    onMounted(() => {
    })



    const navigaToLog = () => {
        console.log(inputValue.value);
        uni.navigateTo({
            //'/pages/log/log?msg='+inputValue.value
            url: `/pages/log/log?msg=${(inputValue.value)}`,
            fail: (err) => {
                console.log(err)
            }
        });
    }
</script>

log.vue

<template>
    <view class=".text-area">
        <text>log界面接收:{{ msg }}</text>
    </view>
    <view class="button-container">
        <!-- <button @click="switchTabtiaozhuan">switchTab跳转到关于页面</button> -->
        <button type="warn" @click="navigaToLogin">去登录1</button>
    </view>
    <view class="button-container">
        <!-- <button @click="switchTabtiaozhuan">switchTab跳转到关于页面</button> -->
        <button type="primary" @click="switchTabTo">去登录2</button>
    </view>

</template>

<script setup>
    import {
        onLoad
    } from '@dcloudio/uni-app';
    import {
        ref
    } from 'vue';
    // const modelValue = defineModel("modelValue");
    const msg = ref("");


    onLoad((options) => {
        console.log(options.msg);
        msg.value = options.msg;
    });


    const navigaToLogin = () => {

        uni.navigateTo({
            url: '/pages/login/login',
            fail: (err) => {
                console.log(err)
            }
        });
    }

    const switchTabTo = () => {

        uni.switchTab({
            url: '/pages/login/login',
            fail: (err) => {
                console.log(err)
            }
        });
    }


</script>

使用pinia

关于uni-app内置pinia的问题

https://ask.dcloud.net.cn/question/194066

安装不了pinia的试试

报错信息

  1. 升级vue npm install vue@3.4.31npm install pinia

  2. 降级pinianpm install pinia@2.0.35执行以下命令看看所有pinia 版本挑着试试npm view pinia versions

  • 导入pinia

  • 创建store 在src下新建index.ts

import { createPinia, defineStore } from 'pinia';
const pinia =createPinia();


export const useCounterStore = defineStore('storeWX', {
    state: () => {
        return {
            openId: "",
            nickName: "尚未登录",
        };
    },
    // 也可以这样定义
    // state: () => ({ count: 0 })

});

再回到main.ts

使用pinia

登录

准备工作

https://mp.weixin.qq.com/

自己注册一个小程序登录的Api

uni.login(OBJECT) | uni-app官网 (dcloud.net.cn)

可以写代码了

login.vue

<template>
    <view>
        <view>
            <text style="font-size: 19px;" >用户昵称:{{storeWX.nickName}}</text>


            <image :src="url" style=" width:200px; height: 200px; background-image: url(../../static/jingli.png);">
            </image>

        </view>


        <button type="primary" @click="wechatLogin">微信登录</button>
    </view>
</template>

<script setup lang="ts">
    import { ref } from 'vue';
    import { useCounterStore } from '../../store/index';

    const nickName = ref("");

    const storeWX = useCounterStore();

    const url = ref("");

    const wechatLogin = () => {
        uni.login({
            "provider": "weixin",
            "onlyAuthorize": true, // 微信登录仅请求授权认证
            success: function (event) {
                const { code } = event
                //客户端成功获取授权临时票据(code),向业务服务器发起登录请求。
                uni.request({
                    url: 'http://localhost:8080/api/wechat/openid', //仅为示例,并非真实接口地址。
                    data: {
                        code: code
                    },
                    success: (res) => {
                        //获得token完成登录
                        console.log(res.data);
                        storeWX.openId=res.data.openid;
                        console.log(storeWX.openId);

                        // uni.setStorageSync('token',res.token)
                        uni.getUserInfo({
                            provider: 'weixin',
                            success: function (infoRes) {
                                nickName.value = infoRes.userInfo.nickName;
                                url.value = infoRes.userInfo.avatarUrl;
                                storeWX.nickName=infoRes.userInfo.nickName;
                                // storeWx.avatarUrl=infoRes.userInfo.avatarUrl,
                                console.log(infoRes)
                            }
                        });
                    }
                });
            },
            fail: function (err) {
                // 登录授权失败
                // err.code是错误码
            }
        })
    }
</script>

@RestController
@RequestMapping("/api/wechat")
public class WeChatController {

    private final  String appid ="你的appid";
    private final  String secret ="你的秘钥";
    @GetMapping("/openid")
    public JSONObject getOpenId(@RequestParam String code){

        String url="https://api.weixin.qq.com/sns/jscode2session?appid="
                +appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code";

        String s = HttpUtil.get(url);
        JSONObject entries = JSONUtil.parseObj(s);
        return entries;
    }
}

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

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

相关文章

【软件造价咨询】软件每年运维费用取开发费用百分之几合适

应用软件的运维费用相对于系统开发建设费用的占比因项目而异&#xff0c;但可以通过一些行业标准和基准数据来进行估算。根据北京软件造价评估联盟2020至2023年发布的《中国软件行业基准数据》CSBMK文件&#xff0c;在这项文件中用百分位数统计列出了“应用软件运维费用占比”的…

mock虚拟接口技术

一、什么是mock mock指的就是使用mock创建出来的一个虚拟的接口 二、对于测试人员而言&#xff0c;我们为什么要使用mock 当我们进行接口测试时&#xff0c;如果对应的接口还没有开发好&#xff0c;但是我们又需要用到这个接口响应的信息&#xff0c;这个时候我们就可以使用…

2024年华为杯研究生数学建模竞赛D题(时空演化模型+脆性指数 完整文章|可视化)

2024年华为杯研究生数学建模竞赛D题 全文请从 底部名片 处加群获取哦~ 问题重述 题目背景&#xff1a; 地理系统是由自然和人文多要素综合作用形成的复杂巨系统。传统上&#xff0c;地理学家通过宏观结构和定性分析方法描述地理系统的主导特征&#xff0c;如地形分布、气候…

两个月学习大语言模型(LLM)的详细计划,保姆级教程非常详细收藏我这一篇就够了!

随着人工智能技术的发展&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;因其在自然语言处理、机器翻译、文本生成等领域的广泛应用而受到越来越多的关注。对于希望掌握这一前沿技术的朋友来说&#xff0c;制定一个系统的学习计划至关重要。本计划旨…

笔试强训,约瑟夫环plus孩子们的游戏​编辑解法二.动态规划大数加法牛客.在字符串中找出连续的最长数字串力扣703.数据流中第K大元素​编辑

目录 约瑟夫环plus 孩子们的游戏​编辑 解法二.动态规划 大数加法 牛客.在字符串中找出连续的最长数字串 力扣703.数据流中第K大元素​编辑 约瑟夫环plus 孩子们的游戏 基本模拟&#xff0c;没啥特殊技巧 import java.util.*;public class Solution {/*** 代码中的类名、…

03-Docker下载加速

03-Docker下载加速 docker下载加速 方式1&#xff1a;使用 网易数帆、阿里云等容器镜像仓库进行下载。 网易数帆官网&#xff1a;https://sf.163.com/ 例如&#xff0c;下载网易数帆镜像中的mysql。&#xff08;网易数帆的地址为 hub.c.163.com&#xff0c;网易数帆对dockerh…

企业微信VS钉钉:高效办公工具推荐!

这两者各有千秋&#xff0c;适合不同的办公场景。企业微信的优势在于与微信的紧密集成&#xff0c;便于与客户沟通&#xff0c;适合需要频繁与外部联系的企业。它提供了基本的办公自动化功能&#xff0c;如团队协作、审批、日程等。 钉钉则在企业管理和团队协作方面功能更全面…

ATX电源插头的接口定义

主板20Pin接口定义 主板24Pin接口定义 CPU4Pin接口定义 4D口定义 显卡6Pin接口定义(6Pin PCI Express接口) 显卡62Pin接口定义(8Pin PCI Express接口) PCI-E供电接口 主要提供12V供电&#xff0c;其中PCI-E 6Pin供电有2组12V供电&#xff0c;而PCI-E 62Pin则有3组12V供电&#…

多线程:死锁

目录 死锁的条件 死锁的示例 死锁的预防与解决 死锁的检测 总结 死锁&#xff08;Deadlock&#xff09;是多线程或多进程环境中一种特定的状态&#xff0c;指的是两个或多个线程或进程在执行过程中&#xff0c;由于争夺资源而造成的一种相互等待的状态&#xff0c;导致它们…

微服务——配置管理

1.配置管理 微服务配置管理是指对微服务架构中各个服务的配置信息进行管理、更新、查询和审计等操作&#xff0c;以确保系统的正常运行和高效管理。例如&#xff0c;网关路由或某些业务配置在配置文件中写死了&#xff0c;每次修改都要重启服务。每个微服务都有很多重复的配置&…

6 门新兴语言,小众亦强大

​编码语言在塑造我们创建软件的方式方面起着至关重要的作用。多年来&#xff0c;我们观察到 Python&#xff0c;Java 和 C等成熟语言的流行。然而&#xff0c;如今一波新的编码语言浪潮已经出现&#xff0c;提出了创造性的解决方案&#xff0c;并推动了软件工程领域所能完成的…

【更新】全国地级市胡焕庸线、长江经济带、地域划分数据

本次数据是地级市的胡焕庸线、长江经济带、地域划分数据&#xff1a; 1、胡焕庸线是一条经典的地理分割线&#xff0c;它区分了中国人口分布的稠密区与稀疏区&#xff0c;东南部地区人口密集&#xff0c;西北部地区则较为稀疏 2、长江经济带是指沿长江流域分布的经济区域&…

聚焦Llama新场景和AR眼镜,扎克伯格用AI赋能元宇宙,Meta Connect 2024开发者大会即将开始

北京时间 9 月 26 日凌晨 1 点&#xff08;美国时间 9 月 25 日上午 10 点&#xff09;&#xff0c;Meta Connect 2024 年度开发者大会即将举行。 届时&#xff0c;Meta 首席执行官马克扎克伯格将聚焦 AI 和元宇宙&#xff0c;向大家分享 Meta 最新的产品和服务。HyperAI超神经…

微信小程序转化为uni-app项目

前言&#xff1a; 之前自己做一个uni-app的项目的时候前端需要实现一个比较复杂的动态tab和swiper切换的功能&#xff0c;但是由于自己前端抠脚的原因没有写出来&#xff0c;然后自己在网上搜索的时候发现了有个微信小程序里面的页面及极其的符合我的需求。那么问题来了我该如何…

《ESP32调试异常集锦》之:程序编译失败,提示undefined reference to `dedic_gpio_bundle_write‘

项目场景&#xff1a; 硬件&#xff1a;ESP32-LyraT-Mini V1.2开发板&#xff0c;使用的是ESP32-WROVER-E 模组。 程序&#xff1a;基于soft_i2c示例程序修改协议内容实现与TM1640通信测试 问题描述 编译失败&#xff0c;"full clean"后重新编译依旧失败。没有语法…

无法将“allure”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的解决方法-allure的安装配置全过程

新手在使用allure之前&#xff0c;以为只是pip install allure-pytest就可以&#xff0c;no&#xff01;&#xff01;&#xff01; 其实&#xff0c;还需要下载allure&#xff0c;allure的具体步骤如下&#xff1a; 1.下载 allure。 allure的下载地址&#xff1a;Central Re…

解决你的IDE在使用的时候测试单元@Test在创建Scanner对象是键盘键入不了的问题;

插播一条快讯&#xff0c;我在我的ide中新创建 了project后发现我的测试单元不好使了&#xff0c;即 import org.junit.Test; 这个包在创建Scanner对象接受键盘时&#xff0c;控制台输入时没有任何反应&#xff0c;键入不了了&#xff0c;我的问题出现原因可能是我导入了JDBC…

基于SpringBoot+Vue的校园快递代取管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

Maven配置及使用

1. Maven简介和安装 1.1. Maven是一个依赖管理工具 问题&#xff1a; jar包的规模 随着使用框架越来越多&#xff0c;或框架的封装程度越来越高&#xff0c;项目中使用的jar包也越来越多。项目中&#xff0c;一个模块里用到上百个jar包是非常正常的jar包的来源 jar包所属技术…