你必须了解的UniAPP入门知识整理
你必须了解的UniAPP入门知识整理
收集整理的这篇文章主要介绍了,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇给大家带来了关于UniAPP快速入门的相关知识整理,希望对大家有帮助。前言 - 课程介绍一、课程背景大前端时代背景下,前端开发人员掌握单一的 Web 端开发能力已经远远不够了,微信小程序、 APP、IOS APP,甚至是 Windows 桌面端,还有最近出的开发,都成了我们成长需要掌握的技能。所以呢,市面上各种「跨平台」开发解决层出不穷,比较有代表性的就是: UniAPP 、 Flutter、 React Native、Taro、Weex 。
UniAPP 是基于「 Vue + 微信小程序 」语言体系,开发人员学习低上手快,同时随着如今 UniAPP 生态也趋于成熟。所以,基于 UniAPP 开发多端项目,已经是很多中小型企业常用的技解决方案。
那么,今天呢,我们就从 UniAPP 基础,对照企业级实践标准,从零到一,一步一步一个 多端(微信小程序 + H5 + 安卓 APP + IOS APP)的社区类项目。
二、学前须知学前须知:
掌握 HT、CSS、JS基础,能够构建静态页面掌握 Vue 基础,能够使用脚手架构建应用掌握微信小程序基础,对微信小程序组件、API服务有一定的三、课程大纲课程简介:
课程大纲介绍实战项目介绍UniAPP 快速入门学习一、UniAPP 介绍(1)什么是 UniAPP ?uni-app 是一个使用 Vue.js 开发所有前端应用的框架,编写一套代码,可发布到 iOS、Andd、H5,以及各种小程序(微信/支付宝//头条/ /钉钉)等多个平台,方便开发者快速交付,不需要转换开发,不需要更改开发习惯。
(2)为什么要选择 UniAPP ?开发者/案例数量更多几十万应用、uni 统计月活12亿、70+ 微信 /
平台能力不受限在跨端的同时,通过条件编译 + 平台特有 API 调用,可以优雅的为某平台写个性化代码,调用专有能力而其他平台
性能体验优秀加载新页面速度更快、自动 diff 更新数据,App 端支持原生渲染支撑更流畅的用户体验,小程序端的性能优于市场其他框架
周边生态丰富插件市场数千款插件,支持 NPM、支持小程序组件和SDK,微信生态的各种 sdk 可直接用于跨平台 APP
学习成本低基于通用的前端技术栈,采用 vue 语法+微信小程序 api,无额外学习成本
(3)UniAPP 功能框架(4)UniAPP 开发环境搭建下载HBuilderX 是通用的,但为uni-app做了特别强化。
下载 App 开发版,可开箱即用;如下载标准版,在运行或发行uni-app时,会提示安装uni-app插件,插件下载完成后方可使用
创建 uni-app 项目选择uni-app类型,输入工程名,选择模板,点击创建,即可成功创建。
uni-app的模板有 Hello uni-app ,是的组件和API示例。
还有一个模板是 uni ui项目模板,日常开发推荐使用该模板,已内置大量常用组件。
运行 uni-app主要包括:浏览器运行、真机运行、小程序运行等
发布 uni-app主要包括:端原生 APP 、离线原生 APP、H5、各种小程序
二、UniAPP 初始化相关配置(1)工程目录结构┌─s uni-app组件目录 │ └─comp-a.vue 可复用的a组件 ├─hyid 本地网页的目录(自建) ├─platforms 存放各平台专用页面的目录(自建) ├─pages 业务页面文件存放的目录 │ ├─index │ │ └─index.vue index页面 │ └─list │ └─list.vue list页面 ├─ic 存放应用引用静态资(如图片、视频等)的目录,注意:静态资源只能存放于此 ├─wxcomponents 存放小程序组件的目录(自建) ├─common 公共资源(自建) ├─api 请求封装(自建) ├─ (自建) ├─mn.js Vue初始化入口文件 ├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期 ├─manifest. 配置应用名称、appid、o、版本等打包信息 └─pages.json 配置页面路由、导航条、选项卡等页面类信息
提示
static下目录的 js 文件不会被 webpack 编译,里面如果有 es6 的代码,不经过转换直接运行,在手机设备上会报错。所以less、scss等资源同样不要放在 static目录下,建议这些公共的资源放在common目录下(2)应用配置 manifest.jsonmanifest.json 文件是应用的配置文件,用于指定应用的名称、图标、权限等,我们也可以在这里为 Vue 为H5 设置跨域拦截
(3)编译配置 vue..jsvue.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被自动加载,一般用于配置 webpack 等编译选项。官方文档
(4)全局配置 page.jsonpages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。它类似微信小程序中app.json的页面管理部分。
官方文档
属性类型必填描述globalStyleObject否设置默认页面的窗口表现pagesObject Array是设置页面路径及窗口表现easycomObject否组件自动引入规则tabBarObject否设置底部 tab 的表现condionObject否启动模式配置sPackagesObject Array否分包加载配置eloadRuleObject否分包预下载规则(5)全局样式 uni.scssuni.scss文件的是为了方便整体控制应用的风格。比如按钮颜色、边框风格,uni.scss文件里预置了一批s预置。官方文档
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.vueApp.vue是uni-app的主组件,所有页面都是在App.vue下进行切换的,是页面入口文件。但App.vue本身不是页面,这里不能编写视图元素。
这个文件的作用包括:调用应用生命周期函数、配置全局样式、配置全局的存储globalData
应用生命周期仅可在App.vue中监听,在页面监听无效。
(7)入口文件 main.jsmain.js是uni-app的入口文件,主要作用是初始化vue实例、定义全局组件、使用需要的插件如vuex。
官方文档
(8)UniAPP 开发规范及资源路径开发规范约定页面文件向导 Vue单文件组件(S)规范组件标签靠近小程序规范,详见 uni-app 组件规范互连能力(JS API)靠近微信小程序规范,但需要将替换替换 wx 为 uni ,详见uni-app接口规范数据绑定及同 Vue.js 规范,同时补充了 App 和页面的生命周期为兼容多端运行,建议使用 flex 布局进行开发资源路径说明template 内约会静态资源,如 image,video 等标签的 src 属性时,可以使用相对路径或绝对路径,形式如下:
!-- 绝对路径,/static指根目录下的static目录,在cli项目中/static指src目录下的static目录 -- image "http://www.js-code.com/tag/" target="_blank" >../../static/logo.png /image
注意
@ 初始的绝对路径以及相对路径会通过 base64 转换规则校验约会的静态资源在非 h5 平台,均不转为 base64H5平台,小于4kb的资源会被转换成base64,其余不转js 文件或 script 标签内,可以使用相对路径和绝对路径,形式如下:
// 绝对路径,@指向项目根目录,在cli项目中@指向src目录 import add &39;@/common/add.js // 相对路径 import add f ../../common/add.js
css 文件或 style 标签内,可以使用相对路径和绝对路径,形式如下:
/* 绝对路径 */ @import url( /common/uni.css @import url( @/common/uni.css /* 相对路径 */ @import url( ../../common/uni.css
css 文件或 style 标签内引用的图片路径,可以使用相对路径也可以使用绝对路径,形式如下:
/* 绝对路径 */ backgroundmage: 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 向 vue 通讯onUnhandledRejection对未处理的 Promise 拒绝事件监听函数(2.8.1+)onPageNotFound页面不存在监听函数onThemeChange监听系统主题变化(2)页面生命周期函数名说明onLoad监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例onShow监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面onReady监听页面初次渲染完成。注意如果渲染,会在页面进入动画完成前触发onHide监听页面隐藏onUnload监听页面卸载onResize监听窗口变化onPullDownRefresh监听用户下拉动作,一般用于,参考示例onRBottom页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意onTabItep点击 tab 时触发,参数为Object,具体见下方注意事项onShareAppMessage用户点击右上角分享onPageScroll监听页面滚动,参数为ObjectonNavigationBarButtonTap监听原生标题栏按钮,参数为ObjectonBack监听页面返回onNavigationBarSeInputChanged监听原生标题栏搜索输入框输入内容变化事件onNavigationBarSearchInputConfirmed监听原生标题栏搜索输入框搜索事件,用户点击上的“搜索”按钮时触发。onNavigationBarSearchInputClicked监听原生标题栏搜索输入框点击事件onShareTimeline监听用户点击右上角转发到圈onAddToFavorites监听用户点击右上角收藏四、UniAPP 路由配置及页面跳转(1)路由配置uni-app 页面路由全部交给框架管理,开发者需要ages.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.To、使用组件 navigator onype= navigate / 页面重定向当前页面出栈,新页面入栈调用 API uni.irectTo 、
使用组件页面返回页面出栈,直到目标返回页调用 API uni.navigateBack 、
使用组件 、
用户按左上角返回按钮、安卓用户点击物理back按键Tab 切换页面全部出栈,只留下新的 Tab 页面调用 API uni.switchTab 、
使用组件 、
用户切换 Tab重加载页面全部出栈,只留下新的页面调用 API uni.reLaunch 、
使用组件(3)获取当前页面栈
getPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。
注意: getCurrentPages() 仅用于展示页面栈的情况,请勿修改页面栈,以免造成页面状态错误。
(4)路由传参与接收说明:页面生命周期的 onLoad()监听页面加载,其参数为上个页面传递的数据,如:
//页面跳转并传递参数uni.navigateTo({ url: page2?ne=liy&ammessage=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 标签,但实际上如果开发者写了p等标签,在编译到非H5平台时也会被编译器转换为 view 标签,类似的还有 span 转 text、a 转navigator等,包括 css 里的元素选择器也会转,但为了管理方便、策略统一,新写代码时仍然建议使用view等组件。
开发者可以通过组合这些基础组件进行快速开发, 基于内置的基础组件,可以开发各种扩展组件,组件规范与vue组件相同。
案例:知心姐姐布局实现
六、UniAPP 常用 API 简介uni-app的 js 代码,h5 端运行于浏览器中,非 h5 端 Android 平台运行在 v8 引擎中,iOS 平台运行在 iOS 自带的 jscore 引擎中。所以,uni-app的 jsAPI 由标准 的 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 等语法,支持字符串、数组、时间等变量及各种处理方法,仅仅是不支持浏览器专用对象。
案例:知心姐姐聊天功能
七、UniAPP 与通信(1)自定义组件概念组件是 vue 技术中非常重要的部分,组件使得与ui相关的轮子可以方便的制造和共享,进而使得vue使用者的开发效率大幅,在项目的component目录下存放组件,uni-app 只支持 vue 单文件组件(.vue 组件)
组件可以使用「全局注册」和「页面引入」两种方式进行使用,使用分为三步:
导入 import xxx from xxx
注册 ( xx ,xx) components:{ xxx }
使用 xx /
(2)父子父组件通过自定义属性向子组件传递数据
子组件通过 props 接收父组件传递的数据
父组件通过自定义事件标签向子组件传递事件子组件通过触发父组件定义事件方式修改父组件数据(3)slot 数据分发与作用域父组件通过调用子组件内部嵌套 html 内容作为slot分发给子组件子组件通过在 slot 标签上添加属性,向父组件通信数据,作用域插槽(4)全局事件定义及通信在整个应用的任何地方均可以使用uni.$on创建一个全局事件在整个应用的任何地方也均可以使用 uni.$emit 来触发全局事件,实现多组件见的数据通信八、UniAPP Vuex 状态管理概念Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可的方式发生变化。
应用场景Vue多个组件之间需要共享数据或状态。
关键规则State:存储状态数据Getter:从状态数据派生数据,相当于 State 的计算属性Mutation:存储用于同步更改状态数据的方法,默认传入的参数为 stateAction:存储用于异步更改状态数据,但不是直接更改,而是通过触发 Mutation 方法实现,默认参数为contextModule:Vuex 模块化交互关系使用方式import { mapState, mapActions} from vuex default { computed: { ...mapState([ loState , userInfo ]) methods: { ...mapActions([ userLoginAction , userLogoutAction ]), }}体验案例:模拟@R_586_2@逻辑实现
注意:配合使用 Storage 来实现刷新页面后状态持续保持的业务需求
九、运行环境判断与跨端兼容(1)开发环境和生产环境uni-app 可通过 process..NODE_ENV 判断当前环境是开发环境还是生产环境,一般用于连接测试或生产服务器的动态切换。
在HBuilderX 中,点击「运行」编译出来的代码是开发环境,点击「发行」编译出来的代码是生产环境
if(process.env.NODE_ENV development ){ console.log( 开发环境 )}else{ console.log( 生产环境 )}(2)判断平台
平台判断有2种场景,一种是在编译期判断,一种是在运行期判断。
编译期判断编译期判断,即条件编译,不同平台在编译出包后已经是不同的代码,
// #ifdef H5 alert( 只有h5平台才有alert方法 )// #endif// 如上代码只会编译到H5的发行包里,其他平台的包不会包含如上代码。
运行期判断 运行期判断是指代码已经打入包中,仍然需要在运行期判断平台,此时可使用 uni.gettemInync().platform 判断客户端环境是 Android、iOS 还是小程序开发工具
switch(uni.getSystemInfoSync().platform){ case android : console.log( 运行Android上 ) break; case ios : console.log( 运行iOS上 ) break; default: console.log( 运行在开发者工具上 ) break;}(3)跨端兼容
uni-app 已将常用的组件、JS API 封装到框架中,开发者按照 uni-app 规范开发即可保证多平台兼容,大部分业务均可直接满足,但每个平台有自己的一些特性,因此会存在一些无法跨平台的情况。
大量写 if else,会造成代码执行性能低下和管理混乱。编译到不同的工程后二次修改,会让后续升级变的很麻烦。在 C 语言中,通过 #ifdef、#ifndef 的方式,为 windows、mac 等不同 os 编译不同的代码。 uni-app 参考这个思路,为 uni-app 提供了条件编译,在一个工程里优雅的完成了平台个性化实现。
条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。
**写法:**以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾。
\#ifdef:if d 仅在某平台存在\#ifndef:if not defined 除了某平台均存在%PLATFORM%:平台名称%PLATFORM% 可取值如下:
值平台APP-PLUSAppAPP-PLUS-NVUEApp nvueH5H5MP-WXIN微信小程序MP-ALIPAY支付宝小程序MP-BAIDU百度小程序MP-TOUTIAO字节跳动小程序MP-QQQQ小程序MP-360小程序MP微信小程序/支付宝小程序/百度小程序/字节跳动小程序/QQ小程序/360小程序QUICKAPP-WEBVIEW快应用通用(包含联盟、)QUICKAPP-WEBVIEW-UNION快应用联盟QUICKAPP-WEBVIEW-HUAWEI快应用华为推荐:《uniapp教程》
以上就是你必须了解的UniAPP入门知识整理的详细内容,更多请关注脚本宝典其它相关文章!
脚本宝典总结以上是为你收集整理的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得网站内容还不错,欢迎将推荐好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:***,请注明来意。
币圈大佬带你玩赚比特币,如何高回报投资!7年币圈资深老玩家,炒币经验丰富波段和短线策略!2023年真的是币圈大年没有什么好虚的,干就完了!经验丰富的大佬每天分享币圈行情,翻几倍的赚钱机会你准备抓了吗?
七年虚拟货币玩家,如何高回报投z数字货币,离比特币减半倒计时一年半不到,最后一波10~100倍财富回报盛宴,错过了就不再有!
从2013年接触区块链,并且在比特币赚到了一桶金从此一直专研数字货币大牛谈不上,但是也带着很多学生做了几年投咨,很多学员也从中赚一桶金,没错过比特币,没错过以太坊,没错过山寨币,没错过ICO,有着多年数字货币经验!
聪明的人都已经在比特币投.资上赚上几千万,上亿都有了!
欢迎大家来一起交流,互相学习!
你必须了解的UniAPP入门知识整理
------
延伸阅读:
炒币一直亏损的原因你知道吗?
每个参与到交易市场的人都是以盈利为目的,但是却只有极少数人能实现,绝大部分人亏损连连,甚至倾家荡产。你只知道亏钱了,但是为什么会亏你真的知道吗?
本人做过股票、期货、现货、外汇等品种,所以我觉得我还是比较有发言权的,总结了一些亏损的主要原因,看看你自己属于哪一种
1、没有严格的交易纪律,左侧交易到止损位必须损,即便后面错了接回来当时也得止损
2、右侧交易进场迟疑不决,涨太多或跌太多才去追,结果就是追到山顶或者地板上
3、操作级别和分析级别不一致,看着5分钟的走势想拿一个月的利润,这和两块钱想中一等奖有何区别
4、仓位管理,杠杆交易动不动就半仓满仓,行情波动快的时候止损都来及,直接穿仓
5、锁仓,至少有超60%新手的通病,这是走向死亡的开始
还有就是盲目信任所谓的老师,经历过的都知道,一些所谓的老师其实就是业务员而已,分析水平不见得有你好,而你一遍遍的询问他只是给自己找一个继续持有的理由而已。而且这些所谓的老师让你重仓、反向喊单时候也不在少数。
每个人都有贪欲,你进场就说明了一切,这是人性的弱点,也是很多时候你不舍得止损,赚一些就赶紧跑的原因。还有你需要明白的走势的完全分类,没有任何一种技术可以告诉你它后面一定怎么走,本身只是一个概率游戏,你懂得了走势的完全分类以后就知道发生某种情况的应对策略该怎么做。这就不至于让你在交易的时候手忙脚乱。
说实话,交易是很累的,而且并不适合绝大多数散户,特别是杠杆交易,股票都玩不好玩杠杆只会让你快速走向灭亡。否则你一夜暴富的心很容易被有心之人利用。与其整天在担惊受怕中度过,倒不如老老实实挖矿来的实在,买一枚币的钱大概可以挖2.8个币。即便币价下跌一半你也可以小赚安然离场,如果币价上涨那真的可以做到躺赚。虽然这不会让你一夜暴富,但是在赚钱的同时将风险降到最低才能说明你是一个合格的投资者。最后想挖矿可以看下方,如果你做交易我也愿意和你分享我的心得
------------------
推荐阅读: