HarmonyOS鸿蒙Next中多Feature模块开发时,如何解决无法共享数据变量的问题

HarmonyOS鸿蒙Next中多Feature模块开发时,如何解决无法共享数据变量的问题

【问题现象】

项目开发中使用了Entry 加多Feature模块的设计方式,但是开发过程中发现Feature之间不能像单个Entry模块内部那样共享数据变量。

【背景知识】

  • 数据传递:数据传递,一般指的是方法传参,静态变量引用等。
  • 数据共享:数据共享在一个模块和多个模块没有什么区别,使用的都是Storage,或者使用数据库

【解决方案】

通过定义静态变量和导出函数的方法,实现Feature之间的数据传递。详细步骤如下:

(1)在Feature中定义函数、常量类

// ets/constants/SharedFeatureConstants.ets
export class SharedFeatureConstants {
  static readonly HARMONYOS_SYSTEM: string = 'HarmonyOS';
  static readonly ANDROID_SYSTEM: string = 'Android';
}

export function add(a:number, b:number) {
  return a + b;
}

export function sub(a:number, b:number) {
  return a - b;
}

(2)Feature Index.ets导出常量类、函数

export { add,sub } from "./src/main/ets/utils/Calc"
export { SharedFeatureConstants } from './src/main/ets/constants/SharedFeatureConstants';

(3)在Entry模块添加Feature 的依赖,Entry的oh-package.json5中增加对feature的依赖关系,点击右上角的同步

"dependencies": {
  "@ohos/sharedFeature": "file:../features/sharedFeature"
}

(4)在Entry模块ets文件中使用导入Feature 的函数、常量,并使用

import { add, sub, SharedFeatureConstants } from "@ohos/sharedFeature"
@Entry
@Component
struct Index {
  content: string = '10和5,两个数的计算结果: ';
  systemContent: string = '系统:';
  @State result: string = '';
  @State systemResult: string ='';
  build() {
    Column() {
      Text(this.content + this.result)
        .fontSize(25)
        .fontWeight(FontWeight.Bold)

      Button("加法")
        .onClick(() => {
          this.result = add(10, 5).toString()
        })

      Button("减法")
        .onClick(() => {
          this.result = sub(10, 5).toString()
        })


      Text(this.systemContent + this.systemResult)
        .fontSize(25)
        .fontWeight(FontWeight.Bold)

      Button('HarmonyOS:')
        .onClick(() => {
          this.systemResult =SharedFeatureConstants.HARMONYOS_SYSTEM
        })

      Button('Android系统:')
        .onClick(() => {
          this.systemResult =SharedFeatureConstants.ANDROID_SYSTEM
        })
    }
    .width('100%')
  }
}

(5)实现效果,通过上述步骤成功在Entry模块拿到Feature的数据。

【总结】

此类问题涉及整个工程中如何进行数据管理、数据传递,在定位这类问题时需明确工程中各个模块的作用,以及它们的依赖关系,并在oh-package.json5中做好依赖定义,工程逻辑结构较清晰且模块间的依赖关系明朗,有利于开发及后期维护。


更多关于HarmonyOS鸿蒙Next中多Feature模块开发时,如何解决无法共享数据变量的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中多Feature模块开发时,如何解决无法共享数据变量的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,多Feature模块开发时无法共享数据变量的问题可以通过以下步骤解决:

  1. 在Feature中定义静态变量和导出函数。
  2. 在Feature的Index.ets文件中导出这些常量和函数。
  3. 在Entry模块的oh-package.json5中添加对Feature的依赖。
  4. 在Entry模块的ets文件中导入并使用Feature的函数和常量。

通过以上步骤,可以在Entry模块中成功获取并使用Feature模块的数据。

回到顶部