2024 不会还有人不会uniapp吧[狗头](2)

插件市场数千款插件,支持 NPM、支持小程序组件和SDK,微信生态的各种 sdk 可直接用于跨平台 APP

  1. 学习成本低

基于通用的前端技术栈,采用 vue 语法+微信小程序 api,无额外学习成本

(3)UniAPP 功能框架

1.png

(4)UniAPP 开发环境搭建

  1. 下载开发工具 HBuilderX

HBuilderX 是通用的前端开发工具,但为uni-app做了特别强化。

下载 App 开发版,可开箱即用;如下载标准版,在运行或发行uni-app时,会提示安装uni-app插件,插件下载完成后方可使用

  1. 创建 uni-app 项目

选择uni-app类型,输入工程名,选择模板,点击创建,即可成功创建。

uni-app自带的模板有 Hello uni-app ,是官方的组件和API示例。

还有一个重要模板是 uni ui项目模板,日常开发推荐使用该模板,已内置大量常用组件。

  1. 运行 uni-app

主要包括:浏览器运行、真机运行、小程序运行等

  1. 发布 uni-app

主要包括:云端原生 APP 、离线原生 APP、H5、各种小程序

二、UniAPP 初始化相关配置


(1)工程目录结构


┌─components            uni-app组件目录

│  └─comp-a.vue        可复用的a组件

├─hybrid                存放本地网页的目录(自建)

├─platforms             存放各平台专用页面的目录(自建)

├─pages                 业务页面文件存放的目录

│  ├─index

│  │  └─index.vue      index页面

│  └─list

│     └─list.vue        list页面

├─static                存放应用引用静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此

├─wxcomponents          存放小程序组件的目录(自建)

├─common                公共资源(自建)

├─api                   请求封装(自建)

├─store                 状态管理(自建)

├─main.js               Vue初始化入口文件

├─App.vue               应用配置,用来配置App全局样式以及监听 应用生命周期

├─manifest.json         配置应用名称、appid、logo、版本等打包信息

└─pages.json            配置页面路由、导航条、选项卡等页面类信息



提示

  • static下目录的 js 文件不会被 webpack 编译,里面如果有 es6 的代码,不经过转换直接运行,在手机设备上会报错。
  • 所以less、scss等资源同样不要放在 static目录下,建议这些公共的资源放在common目录下

(2)应用配置 manifest.json

manifest.json 文件是应用的配置文件,用于指定应用的名称、图标、权限等,我们也可以在这里为 Vue 为H5 设置跨域拦截处理器

(3)编译配置 vue.config.js

vue.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被自动加载,一般用于配置 webpack 等编译选项。官方文档

(4)全局配置 page.json

pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。它类似微信小程序中app.json页面管理部分。

官方文档

| 属性 | 类型 | 必填 | 描述 |

| :-- | :-- | :-- | :-- |

| globalStyle | Object | 否 | 设置默认页面的窗口表现 |

| pages | Object Array | 是 | 设置页面路径及窗口表现 |

| easycom | Object | 否 | 组件自动引入规则 |

| tabBar | Object | 否 | 设置底部 tab 的表现 |

| condition | Object | 否 | 启动模式配置 |

| subPackages | Object Array | 否 | 分包加载配置 |

| preloadRule | Object | 否 | 分包预下载规则 |

(5)全局样式 uni.scss

uni.scss文件的用途是为了方便整体控制应用的风格。比如按钮颜色、边框风格,uni.scss文件里预置了一批scss变量预置。官方文档

uni-app 官方扩展插件(uni ui)及 插件市场 上很多三方插件均使用了这些样式变量,如果你是插件开发者,建议你使用 scss 预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App。

uni.scss是一个特殊文件,在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的编译器在webpack配置中特殊处理了这个 uni.scss,使得每个 scss 文件都被注入这个uni.scss,达到全局可用的效果。如果开发者想要less、stylus的全局使用,需要在vue.config.js中自行配置webpack策略。

(6)主组件 App.vue

App.vue是uni-app的主组件,所有页面都是在App.vue下进行切换的,是页面入口文件。但App.vue本身不是页面,这里不能编写视图元素。

这个文件的作用包括:调用应用生命周期函数、配置全局样式、配置全局的存储globalData

应用生命周期仅可在App.vue中监听,在页面监听无效。

(7)入口文件 main.js

main.js是uni-app的入口文件,主要作用是初始化vue实例、定义全局组件、使用需要的插件如vuex。

官方文档

(8)UniAPP 开发规范及资源路径

  1. 开发规范约定
  • 组件标签靠近小程序规范,详见 uni-app 组件规范
  • 互连能力(JS API)靠近微信小程序规范,但需要将替换替换 wx 为 uni ,详见uni-app接口规范
  • 数据绑定及事件处理同 Vue.js 规范,同时补充了 App 和页面的生命周期
  • 为兼容多端运行,建议使用 flex 布局进行开发
  1. 资源路径说明

template 内约会静态资源,如 image,video 等标签的 src 属性时,可以使用相对路径或绝对路径,形式如下:


<!-- 绝对路径,/static指根目录下的static目录,在cli项目中/static指src目录下的static目录 -->

<image class="logo" src="/static/logo.png"></image>

<image class="logo" src="@/static/logo.png"></image>

<!-- 相对路径 -->

<image class="logo" src="../../static/logo.png"></image>



注意

  • @ 初始的绝对路径以及相对路径会通过 base64 转换规则校验
  • 约会的静态资源在非 h5 平台,均不转为 base64
  • H5平台,小于4kb的资源会被转换成base64,其余不转

js 文件或 script 标签内,可以使用相对路径和绝对路径,形式如下:


// 绝对路径,@指向项目根目录,在cli项目中@指向src目录

import add from '@/common/add.js'

// 相对路径

import add from '../../common/add.js'



css 文件或 style 标签内,可以使用相对路径和绝对路径,形式如下:


/* 绝对路径 */

@import url('/common/uni.css');

@import url('@/common/uni.css');

/* 相对路径 */

@import url('../../common/uni.css');



css 文件或 style 标签内引用的图片路径,可以使用相对路径也可以使用绝对路径,形式如下:


/* 绝对路径 */

background-image: url(/static/logo.png);

background-image: url(@/static/logo.png);

/* 相对路径 */

background-image: url(../../static/logo.png);



三、UniAPP 生命周期


学习一个工具的目的核心是什么?是为了解决核心业务逻辑问题,业务逻辑很多时候简单的解释一句话:“在合适的时机干合适的事情”,OK!什么是合适的时机呢?简单的说,页面运行过程中,各个阶段的回调函数就是页面中的时机,我们也叫这个为“生命周期钩子函数”,当然,业务中我们也会写到很多「回调」的逻辑,这些回调其实也是咱们自定义的时机,UniAPP 的生命周期钩子函数回调函数有哪些呢?我们来理解一下!

uni-app 完整支持 Vue 实例的生命周期,同时还新增 应用生命周期页面生命周期

(1)应用生命周期

| 函数名 | 说明 |

| :-- | :-- |

| onLaunch | 当uni-app 初始化完成时触发(全局只触发一次) |

| onShow | 当 uni-app 启动,或从后台进入前台显示 |

| onHide | 当 uni-app 从前台进入后台 |

| onError | 当 uni-app 报错时触发 |

| onUniNViewMessage | 对 nvue 页面发送的数据进行监听,可参考 nvue 向 vue 通讯 |

| onUnhandledRejection | 对未处理的 Promise 拒绝事件监听函数(2.8.1+) |

| onPageNotFound | 页面不存在监听函数 |

| onThemeChange | 监听系统主题变化 |

(2)页面生命周期

| 函数名 | 说明 |

| :-- | :-- |

| onLoad | 监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例 |

| onShow | 监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面 |

| onReady | 监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发 |

| onHide | 监听页面隐藏 |

| onUnload | 监听页面卸载 |

| onResize | 监听窗口尺寸变化 |

| onPullDownRefresh | 监听用户下拉动作,一般用于下拉刷新,参考示例 |

| onReachBottom | 页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项 |

| onTabItemTap | 点击 tab 时触发,参数为Object,具体见下方注意事项 |

| onShareAppMessage | 用户点击右上角分享 |

| onPageScroll | 监听页面滚动,参数为Object |

| onNavigationBarButtonTap | 监听原生标题栏按钮点击事件,参数为Object |

| onBackPress | 监听页面返回 |

| onNavigationBarSearchInputChanged | 监听原生标题栏搜索输入框输入内容变化事件 |

| onNavigationBarSearchInputConfirmed | 监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。 |

| onNavigationBarSearchInputClicked | 监听原生标题栏搜索输入框点击事件 |

| onShareTimeline | 监听用户点击右上角转发到朋友圈 |

| onAddToFavorites | 监听用户点击右上角收藏 |

四、UniAPP 路由配置及页面跳转


(1)路由配置

uni-app 页面路由全部交给框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式(类似小程序在 app.json 中配置页面路由)。


"pages": [

		{

			"path": "pages/index",

			"style": {

				"navigationBarTitleText": "路由配置",

				"navigationBarBackgroundColor": "#FFFFFF",

				"navigationBarTextStyle": "black",

				"backgroundColor": "#FFFFFF",

				"enablePullDownRefresh": true

			}

		},

		{

			"path": "pages/user",

			"style": {

				"navigationBarTitleText": "路由配置",

				"navigationBarBackgroundColor": "#FFFFFF",

				"navigationBarTextStyle": "black",

				"backgroundColor": "#FFFFFF",

				"enablePullDownRefresh": true

			}

		}

]



(2)路由跳转

uni-app 有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳转(编程式导航)

框架以栈的形式管理当前所有页面, 当发生路由切换的时候,页面栈的表现如下:

| 路由方式 | 页面栈表现 | 触发时机 |

| — | — | — |

| 初始化 | 新页面入栈 | uni-app 打开的第一个页面 |

| 打开新页面 | 新页面入栈 | 调用 API uni.navigateTo

使用组件 <navigator open-type="navigate" /> |

| 页面重定向 | 当前页面出栈,新页面入栈 | 调用 API uni.redirectTo

使用组件 |

| 页面返回 | 页面不断出栈,直到目标返回页 | 调用 API uni.navigateBack

使用组件 、

用户按左上角返回按钮、安卓用户点击物理back按键 |

| Tab 切换 | 页面全部出栈,只留下新的 Tab 页面 | 调用 API uni.switchTab

使用组件 、

用户切换 Tab |

| 重加载 | 页面全部出栈,只留下新的页面 | 调用 API uni.reLaunch

使用组件 |

(3)获取当前页面栈

getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。

注意: getCurrentPages() 仅用于展示页面栈的情况,请勿修改页面栈,以免造成页面状态错误。

(4)路由传参与接收

说明:页面生命周期的 onLoad()监听页面加载,其参数为上个页面传递的数据,如:


//页面跳转并传递参数

uni.navigateTo({

    url: 'page2?name=liy&message=Hello'

});



url为将要跳转的页面路径 ,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔。如 ‘path?key1=value2&key2=value2’,path为下一个页面的路径,下一个页面的onLoad函数可得到传递的参数。


// 页面 2 接收参数

onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数

	console.log(option.name); //打印出上个页面传递的参数。

	console.log(option.message); //打印出上个页面传递的参数。

}



注意:url 有长度限制,太长的字符串会传递失败,并且不规范的字符格式也可能导致传递失败,所以对于复杂参数建议使用 encodeURI、decodeURI 进行处理后传递

(5)小程序路由分包配置

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

所谓的主包,即放置默认启动页面及 TabBar 页面,而分包则是根据 pages.json 的配置进行划分。

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


"subPackages": [

  	{

			"root": "news",

			"pages": [{

					"path": "index",

					"style": {

						"navigationBarTitleText": "新闻中心",

						"navigationBarBackgroundColor": "#FFFFFF",

						"navigationBarTextStyle": "black",

						"backgroundColor": "#FFFFFF"

					}

				}

			]

		}

  	...

],

// 预下载分包设置

"preloadRule": {

		"pages/index": {

			"network": "all",

			"packages": ["activities"]

		}

}



五、UniAPP 常用组件简介


uni-app 为开发者提供了一系列基础组件,类似 HTML 里的基础标签元素,但 uni-app 的组件与 HTML 不同,而是与小程序相同,更适合手机端使用。

虽然不推荐使用 HTML 标签,但实际上如果开发者写了div等标签,在编译到非H5平台时也会被编译器转换为 view 标签,类似的还有 spantextanavigator等,包括 css 里的元素选择器也会转,但为了管理方便、策略统一,新写代码时仍然建议使用view等组件。

开发者可以通过组合这些基础组件进行快速开发, 基于内置的基础组件,可以开发各种扩展组件,组件规范与vue组件相同。

案例:知心姐姐布局实现

六、UniAPP 常用 API 简介


uni-app的 js 代码,h5 端运行于浏览器中,非 h5 端 Android 平台运行在 v8 引擎中,iOS 平台运行在 iOS 自带的 jscore 引擎中。所以,uni-app的 jsAPI 由标准 ECMAScript 的 js API 和 uni 扩展 API 这两部分组成。

ECMAScript 由 Ecma 国际管理,是基础 js 语法。浏览器基于标准 js 扩充了window、document 等 js API;Node.js 基于标准 js 扩充了 fs 等模块;小程序也基于标准 js 扩展了各种 wx.xx、my.xx、swan.xx 的 API。

标准 ecmascript 的 API 非常多,比如:console、settimeout等等。

非 H5 端,虽然不支持 window、document、navigator 等浏览器的 js API,但也支持标准 ECMAScript。

开发者不要把浏览器里的 js 等价于标准 js。

所以 uni-app 的非 H5 端,一样支持标准 js,支持 if、for 等语法,支持字符串、数组、时间等变量及各种处理方法,仅仅是不支持浏览器专用对象。

案例:知心姐姐聊天功能

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

所以 uni-app 的非 H5 端,一样支持标准 js,支持 if、for 等语法,支持字符串、数组、时间等变量及各种处理方法,仅仅是不支持浏览器专用对象。

案例:知心姐姐聊天功能

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-dkMAjZYp-1715282340137)]

[外链图片转存中…(img-hl1PHZf5-1715282340137)]

[外链图片转存中…(img-MQND8EDI-1715282340138)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值