HarmonyOS 鸿蒙Next 获取main_pages.json中配置的所有页面名称
HarmonyOS 鸿蒙Next 获取main_pages.json中配置的所有页面名称
在app启动时,怎么获取main_pages.json中配置的所有页面名称?
3 回复
import { router } from '@kit.ArkUI';
import bundleManager from '@ohos.bundle.bundleManager';
import { BusinessError } from '@kit.BasicServicesKit';
class pageInfoModel {
src: string[] = []
}
@Entry()
@Component
struct Index {
@State pageName: string = 'pages/WantPage';
@State pageName2: string = 'pages/Index2';
@State pageList: string[] = []
private select: number = 1
aboutToAppear(): void {
//方式一 调用getRawFileContent接口获取json文件内容,并读为string
// try {
// let context = getContext(this) as common.Context;
// let data: Uint8Array = context.resourceManager.getRawFileContentSync("main_pages.json");
// let dataStr = buffer.from(data.buffer).toString();
// let pageInfo = JSON.parse(dataStr) as pageInfoModel
// this.pageList = pageInfo.src
// // filter() 方法创建一个新数组,包含通过所提供函数实现的测试的所有元素。这可以用来删除特定元素。
// this.pageList = this.pageList.filter(item => item != "pages/Index")
// console.log("this.pageList:" + JSON.stringify(this.pageList))
// } catch (e) {
// console.info(JSON.stringify(e))
// }
//方式二 直接读取Profile文件,需要在module.json5文件中配置metadata (推荐)
let moduleName = 'entry';
let abilityName = 'EntryAbility';
let metadataName: string = 'ability_metadata';
try {
let data = bundleManager.getProfileByAbilitySync(moduleName, abilityName, metadataName);
let pageInfo = JSON.parse(data[0]) as pageInfoModel
this.pageList = pageInfo.src
// filter() 方法创建一个新数组,包含通过所提供函数实现的测试的所有元素。这可以用来删除特定元素。
this.pageList = this.pageList.filter(item => (!(item == "pages/Index") && !item.includes("TestPage")))
console.log("this.pageList:" + JSON.stringify(this.pageList))
} catch (err) {
console.error("errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);
}
}
build() {
Row() {
Column({ space: 10 }) {
TextPicker({ range: this.pageList, selected: this.select })
.onChange((value: string | string[], index: number | number[]) => {
console.info('Picker item changed, value: ' + value + ', index: ' + index)
this.pageName2 = value as string
})
.width("100%")
TextInput({ text: $$this.pageName })
Text(this.pageName)
Button("router_input").onClick(() => {
router.pushUrl({ "url": `${this.pageName}` })
})
Text(this.pageName2)
Button("router_picker").onClick(() => {
router.pushUrl({ "url": `${this.pageName2}` })
})
}.width('100%')
}.height('100%')
}
}
"metadata": [
{
"name":
"ability_metadata",
"value":
'test',
"resource":
"$profile:main_pages"
}
]
更多关于HarmonyOS 鸿蒙Next 获取main_pages.json中配置的所有页面名称的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
参考一楼回答,注意方式2需要在module.json5文件中配置metadata
在HarmonyOS鸿蒙Next系统中,可以通过读取main_pages.json
配置文件来获取所有配置的页面名称。以下是一个直接的方法来实现这一功能:
-
加载配置文件: 使用
ConfigParser
或鸿蒙系统提供的配置文件读取API(如ohos.configparser
)来加载main_pages.json
。 -
解析JSON: 将加载的JSON字符串转换为JSON对象,鸿蒙系统提供了
ohos.json
模块来处理JSON数据。 -
提取页面名称: 从JSON对象中提取页面名称,通常这些名称会存储在某个特定的键下,比如
"pages"
。
示例代码(假设已正确引入相关模块):
import ohos.json as json
import ohos.configparser as configparser
# 假设配置文件路径为'/path/to/main_pages.json'
config = configparser.read('/path/to/main_pages.json')
json_data = json.loads(config)
# 假设页面名称存储在'pages'键下
page_names = json_data.get('pages', [])
# 输出所有页面名称
for page in page_names:
print(page.get('name', 'Unknown'))
注意:上述代码仅为示例,实际路径和键名需根据main_pages.json
的具体内容调整。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html