目录

微信小程序开发-详情开发一次-多端覆盖

目录

微信小程序开发–详情【开发一次 多端覆盖】

目录


1、准备工作

了解 uni-app :

查看uni-app的官网:https://uniapp.dcloud.net.cn/

uni-app 就是 用 Vue.js 开发所有前端应用 的框架

用vue去写,uni-app会帮我们生成 各个终端适配的一个应用

可以实现开发者编写一套代码,就能发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。【即:一次开发 多端覆盖】

准备开发工具:

下载 :

① HBuilder X 开发工具

官网:

了解 HBuilder X :

uni-app开发工具 是 由 HBuilder X 开发工具来写 的,对这个框架的支持度比较高

https://i-blog.csdnimg.cn/blog_migrate/b5bcd9062aebaeab839e02bab8635749.png

进 HBuilder X 的官网 下载 :(免安装 解压完就可直接用)

https://i-blog.csdnimg.cn/blog_migrate/8fe331ad369cac77cf8cabfb2c68f97f.png

② 微信小程序的模拟器 (也称 微信开发者工具)

官网:

了解 微信小程序的模拟器:

它是将 HBuilder X 上写的代码,构建成 符合微信小程序的项目结构 在这上面编译并运行的

进官网 下载稳定版更新日志 :

https://i-blog.csdnimg.cn/blog_migrate/dee0835658a8af1f0e63e53f598af6b5.png

点击之后 下载步骤:

https://i-blog.csdnimg.cn/blog_migrate/96fa761bd95d153560785ad8aeaaccde.png

https://i-blog.csdnimg.cn/blog_migrate/5f72a9cdb4be8327dc6c863a053f0572.png

https://i-blog.csdnimg.cn/blog_migrate/c9ab9a5d395be2e460912afbe9309f00.png

https://i-blog.csdnimg.cn/blog_migrate/d8c4249a2ce0bfab0ce8d98bab7bfa29.png

安装完成后,打开这个开发者工具:

先扫二维码登录微信

https://i-blog.csdnimg.cn/blog_migrate/4597e353ca91683750f3567a18de35dd.png

点“测试号”,会生成 AppID ,拿到这个AppID就行 其他不用管

https://i-blog.csdnimg.cn/blog_migrate/fdfaf8dc37297f871612447ae9504f88.png

对微信小程序进行配置:

① 配置AppID:直接将AppID放里面就行了,会自动保存

【注意: 相关配置 放进去会自动保存,但是像那些vue文件 编辑之 后 需要手动 ctrl+ s 保存】

https://i-blog.csdnimg.cn/blog_migrate/11ab859c344e27891bb236918f5c8b63.png

② 配置微信小程序的启动地址:

https://i-blog.csdnimg.cn/blog_migrate/62e247bc504c36b72fb0f6a610af862b.png

https://i-blog.csdnimg.cn/blog_migrate/12a14dc55aceebcf73abe524b331c39f.png

使用开发工具HBuilderX::

先安装终端插件

https://i-blog.csdnimg.cn/blog_migrate/a6b60b9ec18db5d529998e60ac4a4167.png

安装“内置的终端插件” 失败:

https://i-blog.csdnimg.cn/blog_migrate/1e060ad8ddf90da3939aac62c154cc1d.png

解决:

查看日志:

https://i-blog.csdnimg.cn/blog_migrate/f882a411a5d585e8cdbd410c89b3df56.png

https://i-blog.csdnimg.cn/blog_migrate/a7b527b0555af662bac245f735a50d93.png

根据日志信息 解决:

https://i-blog.csdnimg.cn/blog_migrate/0ab8539a303d4f8c437a466bb4221769.png

安装成功:

https://i-blog.csdnimg.cn/blog_migrate/b05dd1d4314794d722503ec9f19d78dc.png

2、初始化一个demo

创建项目:

方式一:通过 HBuilderX 的可视化界面

https://i-blog.csdnimg.cn/blog_migrate/9a4d85eedebd6df32ab466b142517ac6.png

https://i-blog.csdnimg.cn/blog_migrate/e9be1a3c2ac98a697ab73cb7bfe9879d.png

方式二:通过 vue-cli 命令行

打开命令行窗口 的方式:

https://i-blog.csdnimg.cn/blog_migrate/a0a841e8724bd3f1a70298cb6dd59d2d.png

输入命令:

① 全局安装 vue-cli(脚手架):(一般都装过了 就不用再安装了)

npm install -g @vue/cli

Java

② 创建项目

npx degit dcloudio/uni-preset-vue#vite-ts 项目名

Java

创建成功截图:

https://i-blog.csdnimg.cn/blog_migrate/d86eb5ae9d4c7ebe95e9cea66b50b4af.png

项目创建好之后 打开所在文件夹:

https://i-blog.csdnimg.cn/blog_migrate/32278e97b9650b3f0d65cdf9712cf337.png

https://i-blog.csdnimg.cn/blog_migrate/2047030bc6a39df14a9c93de14ed87ef.png

安装 node_modules 依赖:

npm i

Java

安装完成 就会自动出来这个依赖文件夹

https://i-blog.csdnimg.cn/blog_migrate/7b84d79539526d8e92a525d2f1a2287d.png

运行初始项目:

https://i-blog.csdnimg.cn/blog_migrate/5de54089b496646713c3f5f1d8e3487f.png

若出现错误:

https://i-blog.csdnimg.cn/blog_migrate/3a065ce63f337fcb86e31a765514f7bc.png

解决:(打开服务端口)

https://i-blog.csdnimg.cn/blog_migrate/32d81314ea1784f87038eedc65a877bc.png

打开之后 这两个工具就可以连起来了(即:当在HBuilderX中点击运行 并成功后,会自动打开微信开发者工具 )

微信开发者工具:(运行之后的界面)

https://i-blog.csdnimg.cn/blog_migrate/f56d820e0a348827b7697195a5bd3749.png

3、完善项目

新建页面:

https://i-blog.csdnimg.cn/blog_migrate/06f8378dbd046f34b949d7e89a94eca3.png

无法直接导入pinia, 若直接运行 会报错

解决:

① 先升级vue :

npm i vue@3.4.31

Shell

② 再安装pinia:

npm i pinia

Java

实现 页面跳转

(参考官网:https://uniapp.dcloud.net.cn/component/navigator.html)

方式一:使用组件

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

Java

方式二:navigateTo方法【只能在菜单之间跳转,超出范围 就不能跳转】

https://i-blog.csdnimg.cn/blog_migrate/47e1a9b6e4113db340db25f44c604248.png

详情可参考:

https://i-blog.csdnimg.cn/blog_migrate/8dc150e9974cbbbc62b0125c5189045d.png

“登录”

可参考官网:https://uniapp.dcloud.net.cn/api/plugins/login.html#login

https://i-blog.csdnimg.cn/blog_migrate/7db569acb8965864abc2fb32d2293151.png

注册微信小程序:

进官网 注册:

https://i-blog.csdnimg.cn/blog_migrate/305d7843c57b268886fae40a242dbeb5.png

https://i-blog.csdnimg.cn/blog_migrate/c2815c86c5fe0cf2599d354f4c92c80b.png

小程序 ID 和 密钥:

注册之后 找到小程序的开发管理 点击“生成”,即可生成自己的密钥

https://i-blog.csdnimg.cn/blog_migrate/26a190929259c2411ce09266ea16741d.png

利用上述的 小程序ID 和 密钥,进行App模块配置:

https://i-blog.csdnimg.cn/blog_migrate/a1f5de4f7133f2788f9a8a995a241253.png

https://i-blog.csdnimg.cn/blog_migrate/7d2848993416127e496b96df49816911.png

资源:

阿里开源的图标组件:https://www.iconfont.cn/

https://i-blog.csdnimg.cn/blog_migrate/9a24afa79f7238ab1365392a7c5d4927.png

https://i-blog.csdnimg.cn/blog_migrate/a152180012ef56892d9e6c31fd7fd757.png

(是 公开、免费使用的 才能下载)

注意:

① 在 pages.json 里 :使用tabBar组件创建菜单

https://i-blog.csdnimg.cn/blog_migrate/1c4f581c8781916be0d25bee6a09638c.png

② 注意 uni-app 里面的 pages.json 对应的是 微信开发者工具里的 app.json

https://i-blog.csdnimg.cn/blog_migrate/8ee08474ce28ece39a2a6778078e162b.png

③ onMounted 和 onLoad 注意:

在 vue 里面 用onMounted 和 onLoad ,他们 都是生命周期的钩子函数

由于 是 先加载完之后 再挂载 ,所以 onLoad 会先出发 再执行 onMounted

④ 注意调用之间的顺序:

微信小程序申请之后 会有个自己的 ID 和 密钥, 要拿用户的信息 我们必须通过 ID 和 密钥,

由于 不能直接在微信小程序里面 调 ID 和 密钥的接口 拿用户信息(因为微信小程序 最终打包也是前端的 ,如果把密钥这些都放进去 很容易信息被盗取)

所以 一定要中转一下,就是要先调用自己的服务器 自己的服务器通过自己申请的appID 和 密钥,再通过微信的服务器调url 拿到用户的id

⑤ 我们要的就是openID , 它比较重要 是因为 openID 是 用户的唯一标识, 而且 openID 要存到 pinia 里面

⑥ tabBar 规定 至少有两个items

https://i-blog.csdnimg.cn/blog_migrate/98573334e12a7251dacd87762de7caa5.png

4、新加内容

遇到的报错内容:

[plugin:vite:vue] [@vue/compiler-sfc] <script setup> cannot contain ES module exports. If you are using a previous version of <script setup>, please consult the updated RFC at https://github.com/vuejs/rfcs/pull/227.

解决方案:

https://i-blog.csdnimg.cn/blog_migrate/cd73580819ab780c8e88f29f9b4c3bfd.png

代码参考:

<template>    
<view>       
 <view>           
 <form @submit="formSubmit" @reset="formReset">
                <view class="uni-form-item uni-column">                 
                   <view class="title">姓名:</view>            
                           <input class="uni-input" name="input" placeholder="请输入姓名" />                </view>
                <view class="uni-form-item uni-column">       
                             <view class="title">性别</view>                    
                             <radio-group name="radio">                        
                             <label>                            
                             <radio value="radio1" /><text></text>                        
                             </label>                        
                             <label>                            
                             <radio value="radio2" /><text></text>                        
                             </label>                    
                             </radio-group>                
                             </view>                
                             <view class="uni-form-item uni-column">                    
                             <view class="title">爱好</view>                   
                             <checkbox-group name="checkbox">                       
                             <label>                            
                             <checkbox value="checkbox1" /><text>唱歌</text>                        
                             </label>                        
                             <label>                            
                             <checkbox value="checkbox2" /><text>运动</text>                        
                             </label>                    
                             </checkbox-group>                
                             </view>                
                             <view class="uni-form-item uni-column">                   
                              <view class="title">年龄</view>                    
                              <slider value="50" name="slider" show-value></slider>                
                              </view>
                <view class="uni-btn-v">                    
                <button form-type="submit">提交</button>                    
                <button type="default" form-type="reset">重置</button>                
                </view>            
                </form>        
                </view>   
                 </view>
                 </template>
<script >    
export default {            
  data() {                
    return {                }         
       },           
    methods: {               
 formSubmit: function(e) {                    
  console.log('form发生了submit事件,携带数据为:' + JSON.stringify(e.detail.value))                    
  var formdata = e.detail.value                    
  uni.showModal({                        
    content: '表单数据内容:' + JSON.stringify(formdata),                        
    showCancel: false                    
    });                
    },                
    formReset: function(e) {                    
      console.log('清空数据')                
      }            
      }        
    }</script>
<style>      
.uni-form-item .title {             
 padding: 20rpx 0;          
 }    
</style>

Java

结果截图:

https://i-blog.csdnimg.cn/blog_migrate/121a59b5af579d67508b0da66935037c.png

https://i-blog.csdnimg.cn/blog_migrate/5a6c1bf36715d193ec6864b10f68c759.png

涉及到的知识点:

数据流向

  • 数据收集
  • 当表单提交时, formSubmit 方法被触发。
  • 事件对象 e 包含了表单的数据,可以通过 e.detail.value 获取。
  • 这些数据被打印到控制台,并通过 uni.showModal 显示给用户。
  • 数据处理
  • 数据并没有被导出到外部,而是在组件内部被处理。

若是将数据导出到外部,

例如发送到服务器或保存到本地存储中,

需要在 formSubmit 方法中添加相应的逻辑。例如,可以使用 fetchaxios 发送 HTTP 请求 来将数据发送到服务器