当前位置:   article > 正文

如何用uniapp开发微信小程序_uniapp 微信小程序开发

uniapp 微信小程序开发

一、为什么使用uni-app?

  1. 微信定义的这套语法,wxml、wxs,以及wx:if等语法,私有化太强。
  2. uni-app支持跨端多平台编译,多端开发成本低。
  3. 基于通用的前端技术栈,采用vue语法+微信小程序api,没有额外的学习成本。

二、uni-app项目起步

uni-app官方推荐的开发工具为HBuilderX,不过由于本人习惯使用vscode,因此介绍如何在vscode中使用uni-app。

1.CLI工程

全局安装 vue-cli 3.x(如已安装请跳过此步骤)

npm install -g @vue/cli

通过CLI创建uni-app项目

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

此时,会提示选择项目模板,初次体验建议选择 hello uni-app 项目模板,如下所示:

我这里选择默认模板。

2.安装vue语法提示插件vetur

<img src=“https://img-cdn-tc.dcloud.net.cn/uploads/article/20190827/f98722b481a8f8bdb29163a4d248926a.png” alt=“img” style=“zoom:67%;” />

3.目录结构

一个uni-app工程,默认包含如下目录及文件:

  1. ┌─uniCloud 云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb(详见uniCloud)
  2. │─components 符合vue组件规范的uni-app组件目录
  3. │ └─comp-a.vue 可复用的a组件
  4. ├─hybrid App端存放本地html文件的目录
  5. ├─platforms 存放各平台专用页面的目录
  6. ├─pages 业务页面文件存放的目录
  7. │ ├─index
  8. │ │ └─index.vue index页面
  9. │ └─list
  10. │ └─list.vue list页面
  11. ├─static 存放应用引用的本地静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
  12. ├─uni_modules 存放[uni_module](/uni_modules)规范的插件。
  13. ├─wxcomponents 存放小程序组件的目录
  14. ├─main.js Vue初始化入口文件
  15. ├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期
  16. ├─manifest.json 配置应用名称、appid、logo、版本等打包信息
  17. └─pages.json 配置页面路由、导航条、选项卡等页面类信息

三、开发

1.页面结构

页面结构和一般的vue一样,既有vue的生命周期,也有小程序的生命周期,如下所示:

  1. <template>
  2. <view class="content">
  3. </view>
  4. </template>
  5. <script>
  6. export default {
  7. data() {
  8. return {
  9. }
  10. },
  11. methods: {
  12. },
  13. onLoad() {
  14. },
  15. created() {
  16. }
  17. }
  18. </script>
  19. <style>
  20. </style>

2.tabbar和路由跳转

(1)tabbar

如果应用是一个多 tab 应用,可以通过 tabBar 配置项指定一级导航栏,以及 tab 切换时显示的对应页。

在 pages.json 中提供 tabBar 配置,不仅仅是为了方便快速开发导航,更重要的是在App和小程序端提升性能。在这两个平台,底层原生引擎在启动时无需等待js引擎初始化,即可直接读取 pages.json 中配置的 tabBar 信息,渲染原生tab。

  1. "tabBar": {
  2. "color": "#7A7E83",
  3. "selectedColor": "#3cc51f",
  4. "borderStyle": "black",
  5. "backgroundColor": "#ffffff",
  6. "list": [{
  7. "pagePath": "pages/component/index",
  8. "iconPath": "static/image/icon_component.png",
  9. "selectedIconPath": "static/image/icon_component_HL.png",
  10. "text": "组件"
  11. }, {
  12. "pagePath": "pages/API/index",
  13. "iconPath": "static/image/icon_API.png",
  14. "selectedIconPath": "static/image/icon_API_HL.png",
  15. "text": "接口"
  16. }]
  17. }

(2)路由跳转

路由方式页面栈表现触发时机
初始化新页面入栈uni-app 打开的第一个页面
打开新页面新页面入栈调用 API uni.navigateTo、使用组件 <navigator open-type=“navigate”/>
页面重定向当前页面出栈,新页面入栈调用 API uni.redirectTo、使用组件 <navigator open-type=“redirectTo”/>
页面返回页面不断出栈,直到目标返回页调用 API uni.navigateBack 、使用组件 <navigator open-type=“navigateBack”/> 、用户按左上角返回按钮、安卓用户点击物理back按键
Tab 切换页面全部出栈,只留下新的 Tab 页面调用 API uni.switchTab 、使用组件 <navigator open-type=“switchTab”/> 、用户切换 Tab
重加载页面全部出栈,只留下新的页面调用 API uni.reLaunch、使用组件 <navigator open-type=“reLaunch”/>

3.生命周期

uni-app支持vue以及小程序原生语法的生命周期。

4.全局变量

(1)通过Storage来设置

设置缓存:uni.setStorageSync(key, value)

获取缓存:uni.getStorageSync(key)

删除缓存:uni.removeStorageSync(key)

(2)getApp()

需要在app.vue里设置变量 globalData

设置变量:getApp().globalData.key = xxx

获取变量:let key = getApp().globalData.key

(3)vuex

uni-app 内置了vuex

什么时候需要用vuex?

  • 当一个组件需要多次派发事件时。例如购物车数量加减。
  • 跨组件共享数据、跨页面共享数据。例如订单状态更新。
  • 需要持久化的数据。例如登录后用户的信息。
  • 当您需要开发中大型应用,适合复杂的多模块多页面的数据交互,考虑如何更好地在组件外部管理状态时。

5.分包

分包加载配置,此配置为小程序的分包加载机制。

因小程序有体积和资源加载限制,小程序平台提供了分包方式,优化小程序的下载和启动速度。

所谓的主包,即放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本;而分包则是根据pages.json的配置进行划分。

在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,会把对应分包自动下载下来,下载完成后再进行展示。此时终端界面会有等待提示。

使用方法:

假设支持分包的 uni-app 目录结构如下:

  1. ┌─pages
  2. │ ├─index
  3. │ │ └─index.vue
  4. │ └─login
  5. │ └─login.vue
  6. ├─pagesA
  7. │ ├─static
  8. │ └─list
  9. │ └─list.vue
  10. ├─pagesB
  11. │ ├─static
  12. │ └─detail
  13. │ └─detail.vue
  14. ├─static
  15. ├─main.js
  16. ├─App.vue
  17. ├─manifest.json
  18. └─pages.json

则需要在 pages.json 中填写

  1. {
  2. "pages": [{
  3. "path": "pages/index/index",
  4. "style": { ...}
  5. }, {
  6. "path": "pages/login/login",
  7. "style": { ...}
  8. }],
  9. "subPackages": [{
  10. "root": "pagesA",
  11. "pages": [{
  12. "path": "list/list",
  13. "style": { ...}
  14. }]
  15. }, {
  16. "root": "pagesB",
  17. "pages": [{
  18. "path": "detail/detail",
  19. "style": { ...}
  20. }]
  21. }],
  22. "preloadRule": {
  23. "pagesA/list/list": {
  24. "network": "all",
  25. "packages": ["__APP__"]
  26. },
  27. "pagesB/detail/detail": {
  28. "network": "all",
  29. "packages": ["pagesA"]
  30. }
  31. }
  32. }

四、运行发布

运行项目

npm run dev:%PLATFORM%

发布项目

npm run build:%PLATFORM%

%PLATFORM% 可取值如下:

平台
h5H5
mp-alipay支付宝小程序
mp-baidu百度小程序
mp-weixin微信小程序
mp-toutiao头条小程序
mp-qqqq 小程序
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/988765
推荐阅读