HarmonyOS 鸿蒙Next 获取main_pages.json中配置的所有页面名称

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

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配置文件来获取所有配置的页面名称。以下是一个直接的方法来实现这一功能:

  1. 加载配置文件: 使用ConfigParser或鸿蒙系统提供的配置文件读取API(如ohos.configparser)来加载main_pages.json

  2. 解析JSON: 将加载的JSON字符串转换为JSON对象,鸿蒙系统提供了ohos.json模块来处理JSON数据。

  3. 提取页面名称: 从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

回到顶部