草庐IT

uniapp微信小程序系列(2)pages.json实用配置详解

黄泽平 2023-04-04 原文

本篇主要介绍其中几个实用的配置:

1. 配置应用级别样式、tabBar样式

2. 配置前端页面路由、分包路由

3. 配置easycom全局组件(组件无需import引入直接使用)

一. 配置应用级别样式、tabBar样式

创建一个包含首页、我的两个tabBar模块的应用布局,配置参数如下:

"globalStyle": {
	"navigationBarTextStyle": "black", // 导航栏标题颜色及状态栏前景颜色,仅支持 black/white
	"navigationBarTitleText": "导航栏默认标题", // 导航栏标题默认文字内容
	"navigationBarBackgroundColor": "#F8F8F8", // 顶部导航栏(状态栏)背景颜色
	"navigationStyle": "default", // 是否自定义顶部导航栏(状态栏) 自定义custom、默认显示default
	"backgroundColor": "#F8F8F8", // 当enablePullDownRefresh为true时,下拉显示出来的窗口的背景色
	"backgroundTextStyle": "dark", // 下拉 loading 的样式,仅支持 dark/light
	"enablePullDownRefresh": false, // 是否开启下拉刷新,触发下拉刷新时,配合页面生命周期onPullDownRefresh使用
	"onReachBottomDistance": 50 // 页面上拉触底事件触发时距页面底部距离,单位只支持px,默认50。配合页面生命周期onReachBottom使用
},
"tabBar": {
	"color": "#909399", // tab 上的文字默认颜色
	"selectedColor": "#F30500", //  tab 上的文字选中时的颜色
	"backgroundColor": "#FFFFFF", // tab 的背景色
	"borderStyle": "black", // tabbar 上边框的颜色,可选值 black/white
	"list": [{
			"pagePath": "pages/index/index",
			"iconPath": "static/menu_icon/home_0.png",
			"selectedIconPath": "static/menu_icon/home_1.png",
			"text": "首页"
		},
		{
			"pagePath": "pages/mine/mine",
			"iconPath": "static/menu_icon/my_0.png",
			"selectedIconPath": "static/menu_icon/my_1.png",
			"text": "我的"
		}
	]
}

详细配置功能,请参考配置后的注释

二. 配置前端页面路由、分包路由

以下配置中,包含三个页面,分别是主包的首页、我的模块及分包的支付模块,目录结构如下图:

pages.json中,主包、分包路由配置如下(其中页面style属性配置项,同globalStyle配置一致)

"pages": [{
	"path": "pages/index/index",
	"style": {
		"navigationBarTitleText": "首页",
		"enablePullDownRefresh": true,
		"disableScroll": true // 设置为 true 则页面整体不能上下滚动(bounce效果),只在页面配置中有效,在globalStyle中设置无效
	}
}, {
	"path": "pages/mine/mine",
	"style": {
		"navigationBarTitleText": "我的",
		"enablePullDownRefresh": false
	}
}],
"subPackages": [{
	"root": "sub_packages/pay",
	"pages": [{
		"path": "index/index",
		"style": {
			"navigationBarTitleText": "支付模块",
			"enablePullDownRefresh": false
		}
	}]
}],

为什么需要分包的存在?是因为微信官方对小程序的主包大小做了严格限制,编译后的主包代码大小容量不允许超过2M,超出部分应使用分包。

运行规则:主包代码块在小程序启动时就会被同步主动加载,分包代码在小程序启动时不会被执行,分包模块只有在被引用时才会被异步加载进来。

主包页面调起分包模块页面,使用常规路由API实现即可,如:

// 主包vue页面文件掉起分包页面
uni.navigateTo({
	url: '/sub_packages/pay/index/index'
})

三. 配置easycom全局组件

传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。easycom将其精简为一步。 只要组件安装在项目的components目录下,并符合components/组件名称/组件名称.vue目录结构。就可以不用引用、注册,直接在页面中使用。

在components目录下创建两个vue组件,分别为good-detail.vue、uni-good-detail.vue,good-detail.vue组件将会通过import引用,而uni-good-detail.vue组件将会通过配置easycom后直接引用。目录结构及组件代码如下:

 good-detail.vue、uni-good-detail.vue两个组件代码相同,以uni-good-detail.vue为例,如:

<template>
	<view @click="click">
		{{title}}
	</view>
</template>

<script>
	export default {
		name: "uni-good-detail",
		props: {
			title: {
				type: String,
				default: "<uni-good-detail>商品组件(默认)"
			}
		},
		data() {
			return {

			};
		},
		// 在实例初始化之前被调用
		beforeCreate() {
			console.log('beforeCreate');
		},
		// 在实例创建完成后被立即调用
		created() {
			console.log('created');
		},
		// 在挂载开始之前被调用
		beforeMount() {
			console.log('beforeMount');
		},
		// 挂载到实例上去之后调用
		mounted() {
			console.log('mounted');
		},
		// 实例销毁之前调用(页面出栈时执行,uni.navigateTo离开路由时并不会执行)
		beforeDestroy() {
			console.log('beforeDestroy');
		},
		// 实例销毁后调用(页面出栈时执行,uni.navigateTo离开路由时并不会执行)
		destroyed() {
			console.log('destroyed');
		},
		methods: {
			click() {
				this.$emit("onChange", {
					id: 'goodID',
					title: this.title
				})
			}
		}
	}
</script>

<style lang="scss" scoped>

</style>

此时,需要在pages.json中配置easycom,配置如下:

"easycom": {
	"autoscan": true,
	"custom": {
		"^uni-(.*)": "@/components/uni-$1.vue" // 匹配components目录内的vue文件
	}
}

在使用good-detail.vue、uni-good-detail.vue两个组件时,引入的代码分别为:

<template>
	<view class="container">
		<good-detail @onChange="onChange"></good-detail>
		<uni-good-detail @onChange="onChange"></uni-good-detail>
	</view>
</template>

<script>
	// 由于配置了easycom,组件uni-good-detail不用import引入,也不需要在components内注册uni-list组件。template里就可以直接用
	import goodDetail from "@/components/good-detail.vue"

	export default {
		components: {
			goodDetail,
		},
		data() {
			return {}
		},
		// 页面加载
		onLoad() {
			console.log('onLoad');
		},
		// 页面显示
		onShow() {
			console.log('onShow');
		},
		// 页面初次渲染完成(同onLoad仅触发一次)
		onReady() {
			console.log('onReady');
		},
		// 页面滚动监听 scrollTop:距离顶部的偏移量
		onPageScroll(e) {
			console.log(e.scrollTop);
		},
		// 下拉刷新
		onPullDownRefresh() {
			console.log('onPullDownRefresh');
		},
		// 滚动到底部
		onReachBottom() {
			console.log('onReachBottom');
		},
		// 底部Tab切换
		onTabItemTap() {
			console.log('onTabItemTap');
		},
		// 分享好友
		onShareAppMessage() {
			console.log('onShareAppMessage');
		},
		// 分享朋友圈
		onShareTimeline() {
			console.log('onShareTimeline');
		},
		// 收藏小程序
		onAddToFavorites() {
			console.log('onAddToFavorites');
		},
		methods: {
			onChange(e) {
				console.log(e);
			}
		}
	}
</script>

<style lang="scss">
</style>

可见,通过配置easycom后,uni-good-detail.vue组件无需通过import引用也可直接使用。

关于以上3种常用pages.json配置,全文件配置脚本如下:

{
	"easycom": {
		"autoscan": true,
		"custom": {
			"^uni-(.*)": "@/components/uni-$1.vue" // 匹配components目录内的vue文件
		}
	},
	"pages": [{
		"path": "pages/index/index",
		"style": {
			"navigationBarTitleText": "首页",
			"enablePullDownRefresh": true,
			"disableScroll": true // 设置为 true 则页面整体不能上下滚动(bounce效果),只在页面配置中有效,在globalStyle中设置无效
		}
	}, {
		"path": "pages/mine/mine",
		"style": {
			"navigationBarTitleText": "我的",
			"enablePullDownRefresh": false
		}
	}],
	"subPackages": [{
		"root": "sub_packages/pay",
		"pages": [{
			"path": "index/index",
			"style": {
				"navigationBarTitleText": "支付模块",
				"enablePullDownRefresh": false
			}
		}]
	}],
	"globalStyle": {
		"navigationBarTextStyle": "black", // 导航栏标题颜色及状态栏前景颜色,仅支持 black/white
		"navigationBarTitleText": "导航栏默认标题", // 导航栏标题默认文字内容
		"navigationBarBackgroundColor": "#F8F8F8", // 顶部导航栏(状态栏)背景颜色
		"navigationStyle": "default", // 是否自定义顶部导航栏(状态栏) 自定义custom、默认显示default
		"backgroundColor": "#F8F8F8", // 当enablePullDownRefresh为true时,下拉显示出来的窗口的背景色
		"backgroundTextStyle": "dark", // 下拉 loading 的样式,仅支持 dark/light
		"enablePullDownRefresh": false, // 是否开启下拉刷新,触发下拉刷新时,配合页面生命周期onPullDownRefresh使用
		"onReachBottomDistance": 50 // 页面上拉触底事件触发时距页面底部距离,单位只支持px,默认50。配合页面生命周期onReachBottom使用
	},
	"tabBar": {
		"color": "#909399", // tab 上的文字默认颜色
		"selectedColor": "#F30500", //  tab 上的文字选中时的颜色
		"backgroundColor": "#FFFFFF", // tab 的背景色
		"borderStyle": "black", // tabbar 上边框的颜色,可选值 black/white
		"list": [{
				"pagePath": "pages/index/index",
				"iconPath": "static/menu_icon/home_0.png",
				"selectedIconPath": "static/menu_icon/home_1.png",
				"text": "首页"
			},
			{
				"pagePath": "pages/mine/mine",
				"iconPath": "static/menu_icon/my_0.png",
				"selectedIconPath": "static/menu_icon/my_1.png",
				"text": "我的"
			}
		]
	}
}

有关uniapp微信小程序系列(2)pages.json实用配置详解的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  4. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  5. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  6. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  7. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":

  8. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  9. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  10. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

随机推荐