uniapp微信小程序系列(1)基础与入门

这篇具有很好参考价值的文章主要介绍了uniapp微信小程序系列(1)基础与入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

uni-app 是一个使用 Vue.js (opens new window)开发所有前端应用的框架,支持iOS、Android、Web及各平台小程序。本系列文章为uni-app开发微信小程序知识点的归纳总结。

项目创建推荐

如果你是新手,项目创建一般推荐:uni-ui项目,该项目架构包含了uni官方提供的内嵌UI组件库,方便直接使用。

uniapp微信小程序,uniapp小程序,小程序,uni-app,微信小程序

如果你已经对uni-app很熟悉,能熟练使用uView等UI框架及相关配置,建议创建 “默认模板” 新建项目。

页面生命周期归纳

uni-app中的页面文件,通常会存放在工程根目录下的pages文件夹。

每次新建页面,均需在pages.json中配置pages列表;未在pages.json -> pages 中配置的页面,uni-app会在编译阶段进行忽略。pages.json的完整配置参考(官网):全局文件。

链接:pages.json 页面路由 | uni-app官网

小程序页面的生命周期,主要包括:

onLoad:监听页面加载事件,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参),当页面来源为回退操作navigateBack或tab切换时,该函数不再重复执行

onShow:监听页面显示事件。页面每次出现在屏幕上都触发,包括页面来源为回退操作navigateBack或tab切换

onReady:监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发,当页面来源为回退操作navigateBack或tab切换时,该函数不再重复执行

正常情况下的执行顺序:1)onLoad —— 2)onShow —— 3)onReady

onUnload:监听页面卸载事件

onResize:监听窗口尺寸变化

onPullDownRefresh:监听用户下拉动作,下拉刷新,需要在page.json开启该页面下拉刷新权限

onReachBottom:页面滚动到底部的事件。可在pages.json里定义具体页面底部的触发距离onReachBottomDistance,比如设为50,那么滚动页面到距离底部50px时,就会触发onReachBottom事件。

onTabItemTap:点击 tab 切换时触发,参数为Object

onShareAppMessage:小程序右上角分享给好友

onShareTimeline:小程序右上角分享至朋友圈

onAddToFavorites:小程序右上角收藏

onPageScroll:监听页面滚动,参数为Object。回调参数scrollTop表示页面在垂直方向已滚动的距离

App.vue文件概述

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

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

1)应用主要生命周期:

onLaunch:初始化完成时触发(全局只触发一次)

onShow:应用启动或从后台进入前台触发

onHide:从前台进入后台触发

onPageNotFound:页面不存在监听函数。比如通过分享卡片、小程序码且发现页面不存在,才会触发,通过路由api实现跳转不存在的页面不会触发(如 uni.navigateTo)

2)应用全局变量定义:globalData

在子页面中使用 getApp().globalData 获取变量对象,可以对全局变量对象进行修改

在App.vue中定义代码如下:

<script>
	export default {
		globalData: {
			text: '20220922'
		},
		onLaunch: function() {
			console.log('App Launch')
			console.log(this.globalData.text) 
		},
		onShow: function() {
			console.log('App Show')
		},
		onHide: function() {
			console.log('App Hide')
		}
	}
</script>

在子页面中使用全局变量 globalData:

<script>
	export default {
		data() {
			return {}
		},
		// 页面加载
		onLoad() {
			console.log('onLoad');
			const app = getApp();
			console.log(app.globalData.text) // '20220922'
			app.globalData.text = 'abc'; //  允许对全局变量进行修改
			console.log(app.globalData.text) // 'abc'
		}
	}
</script>

css全局样式配置,如:

<style lang="scss">
	// 设置整个项目的背景色
	page {
		background-color: #f5f5f5;
	}
</style>

3)获取页面路由栈:getCurrentPages()

getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。该函数仅用于展示页面栈的情况,请勿修改页面栈,以免造成页面状态错误。

路由方式 页面栈表现 触发时机
初始化 新页面入栈 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"/>

在跳转页面传递参数时,url有长度限制,太长的字符串会传递失败,可使用窗体通信、全局变量,或encodeURIComponent等多种方式解决,如下为encodeURIComponent示例。

<navigator :url="'/pages/navigate/navigate?item='+ encodeURIComponent(JSON.stringify(item))"></navigator>
// navigate.vue页面接受参数
onLoad: function (option) {
	const item = JSON.parse(decodeURIComponent(option.item));
}

页面间全局通讯API应用

与EventBus使用规则一致

触发事件:uni.$emit(eventName,OBJECT)

监听事件:uni.$on(eventName,callback)

监听事件(只触发一次):uni.$once(eventName,callback)

移除事件:uni.$off([eventName, callback])

移除事件注意项:

  • 如果没有提供参数,则移除所有的事件监听器;
  • 如果只提供了事件,则移除该事件所有的监听器;
  • 如果同时提供了事件与回调,则只移除这个回调的监听器;
  • 提供的回调必须跟$on的回调为同一个才能移除这个回调的监听器;

uni.scss的优缺点

uni.scss为uni-app新建项目自带工程文件,使用的预处理器为sass/scss,由此可见,uni-app官方推荐的是scss,不建议在 uni-app中使用less、stylus等。

uni.scss具有如下一些特点:

  • 无需引入,uni-app在编译时,会自动引入此文件
  • 在此中定义的scss变量,可以全局使用,可以在此定义一些颜色,主题,尺寸等变量
  • uni.scss会编译到每个scss文件中(请着重理解这一句话)

综上所述,我们可以得知,uni.scss主要是利用scss的特性,定义一些全局变量,供各个写了lang=scss的style标签引用,但是这引出了一个重要的问题:
uni.scss中所写的一切内容,都会注入到每个声明了scss的文件中,这意味着,如果您的uni.scss如果有几百行,大小10k左右,那么这个10k都会被注入所有的 其他scss文件(页面)中,如果您的应用有50个页面,那么有可能因此导致整体的包体积多了50 * 10 = 500k的大小,这可能会导致小程序包太大而无法预览和发布, 所以,我们建议您只将scss变量相关的内容放到uni.scss中。

提个题外话,如果使用uView组件库配合开发,如何修改组件原生样式呢?可以使用::v-deep,值得注意的是,在微信小程序中要求::v-deep或/deep/前面必须还要有父元素的类名存在。如:文章来源地址https://www.toymoban.com/news/detail-585473.html

// 定义一个u-button组件
<template>
	<view class="container">
		<u-button type="primary" text="确定" @click="click"></u-button>
	</view>
</template>

// 修改u-button组件内置样式
<style lang="scss" scoped>
	.container ::v-deep button {
		background-color: #FFFF00;
	}
</style>

到了这里,关于uniapp微信小程序系列(1)基础与入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WebStorm开发uni-app ,用vue2实现手机APP(apk) + 微信小程序多端项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2024年02月11日
    浏览(69)
  • 微信小程序uni-app

    小程序 是一种不需要下载、安装即可使用的应用,它实现了应用触手可及的梦想,用户扫一扫或者搜一下就能打开应用,也实现了用完即走的理念,用户不用安装太多应用,应用随处可用,但又无须安装卸载。 微信开发文档 1、工作原理 网页开发,渲染线程和脚本是互斥的

    2024年02月10日
    浏览(119)
  • 微信小程序授权(uni-app)

    概述 为了避免重复开发,自己封装了一个通用用户授权回调方法,只需要传入需要授权的scope,权限中文描述、回调函数,就可以实现一整套小程序是否授权、打开授权设置,调用后续操作函数的工作 功能 可以根据自己的实际应用进行微调 目前使用的uni-app版本,可以根据自

    2024年02月16日
    浏览(81)
  • uni-app(微信小程序)获取当前位置uni.getLocation

     1、微信公众平台  开发  开发管理   2、开通之后到项目文件    3、下载腾讯地图插件并引入到文件中    

    2024年02月11日
    浏览(62)
  • uni-app 微信小程序 激励视频广告

    封装激励视频-Ad.js 调用上面写的方法:

    2024年02月12日
    浏览(77)
  • uni-app微信小程序使用echarts

    前言:本来是使用的ucharts,但因为无法监听图例点击交互,满足不了需求,所以只能放弃。 首先,下载echart组件。可以先随便建个文件夹,然后 npm init。接着下载依赖 然后找到 node_modulesmpvue-echarts下的文件,如图 只留下src,其他的删掉(没有用到)。然后复制 mpvue-echart

    2024年02月10日
    浏览(69)
  • 【uni-app微信小程序】实现支付功能

    实现微信支付功能需要在小程序后台配置支付相关信息,并且在前端代码中调用微信支付API进行支付操作。好的, uni-app微信小程序实现支付功能整体流程 大致如下: 注册微信公众平台,并完成开发者资质认证; 在微信商户平台注册商户账号,并完成商户资质认证; 在商户

    2024年02月13日
    浏览(95)
  • 语法速通 uni-app随笔【uni-app】【微信小程序】【vue】

    其中, pages 目录/ index 目录【必有】: index.js 编写业务逻辑 【初始数据,生命周期函数】 index.json 编写配置 index.wxml 编写模板 【可理解为本页html】 index.wxss 【可理解为本页css】 直接输入敲回车,连尖括号都不需要就可以标签补全 1)初始数据写死 在 index.wxml 引入变

    2024年02月12日
    浏览(165)
  • 前端Uni-app开发微信小程序|微信小程序手机商城

    作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库

    2024年02月12日
    浏览(54)
  • uni-app微信小程序uni.getLocation获取经度纬度【定位】

    需求:点击按钮获取当前微信位置,以及点击拒绝授权后,下次点击还可以拉起授权窗口; 拒绝授权后重新拉起授权操作: 直接授权操作: 原因:因为微信小程序从2019年1月14日起新提交发布的版本若未填写地理位置用途说明,则将无法正常调用地理位置相关接口; 解决办

    2024年04月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包