# 如何在Entry模块中访问Library模块中的数据

#### 问题现象

在项目开发中采用了Entry模块结合多个Library模块的设计方式，这种情况下，Library模块中的数据Entry模块如何访问到？

#### 背景知识

*   模块（Module）是应用的基本功能单元，包含了源代码、资源文件、第三方库及配置文件。一个应用通常会包含一个或多个模块，因此，可以在工程中创建模块。
*   模块（Module）类型：模块按照使用场景可以分为Ability类型的Module和Library类型的Module。前者用于实现应用的功能和特性，后者用于实现代码和资源的共享。

#### 解决方案

通过在Library模块中定义静态变量和导出函数的方法，实现模块之间的数据传递。详细步骤如下：

1.  创建共享模块：新建工程时选择API 10及以上的Stage模型，工程创建完成后，新建'Static Library'模块。模块创建方法可参考在工程中添加Module。
    
    此案例中通过添加模块方式，创建名为'library'的模块。
    

2.  在Library模块中定义函数、常量类；
    
    ```
    // ets/constants/SharedLibraryConstants.ets
    export class SharedLibraryConstants {
      static readonly ENGLISH: string = 'Hello';
      static readonly CHINESE: string = '你好';
    }
    
    
    export function add(a: number, b: number) {
      return a + b;
    }
    
    
    export function sub(a: number, b: number) {
      return a - b;
    }
    ```
    
3.  在library模块下找到Index.ets，导出第二步中定义的常量类和函数；
    
    ```
    export { SharedLibraryConstants, add, sub } from './src/main/ets/constants/SharedLibraryConstants';
    ```
    
4.  在Entry模块添加library的依赖：
    
    Entry的oh-package.json5中增加对library的依赖关系，点击右上角的同步。
    
    ```
    "dependencies": {
      "library": "file:../library"
    }
    ```
    
    注：这边的'library'是library模块下oh-package.json5中name的名称。
    
5.  在Entry模块src/main/ets/pages/Index.ets中导入library模块中定义的函数、常量类，并使用。
    
    ```
    import { add, sub, SharedLibraryConstants } from 'library';
    
    
    @Entry
    @Component
    struct Index {
      content: string = '10和5，两个数的计算结果： ';
      systemContent: string = '语言：';
      @State result: string = '';
      @State systemResult: string = '';
    
    
      build() {
        Column() {
          Text(this.content + this.result)
            .fontSize(20)
            .fontWeight(FontWeight.Bold)
            .margin(10);
    
    
          Button('加法')
            .onClick(() => {
              this.result = add(10, 5).toString();
            })
            .margin(10);
    
    
          Button('减法')
            .onClick(() => {
              this.result = sub(10, 5).toString();
            })
            .margin(10);
    
    
    
    
          Text(this.systemContent + this.systemResult)
            .fontSize(20)
            .fontWeight(FontWeight.Bold)
            .margin(10);
    
    
          Button('英文')
            .onClick(() => {
              this.systemResult = SharedLibraryConstants.ENGLISH;
            })
            .margin(10);
    
    
          Button('中文')
            .onClick(() => {
              this.systemResult = SharedLibraryConstants.CHINESE;
            })
            .margin(10);
        }
        .width('100%');
      }
    }
    ```
    
6.  实现效果，通过上述步骤成功在Entry模块拿到library的数据。如图所示：当点击'加法'时，调用library中定义的加法函数，计算结果为'15'。当点击'减法'时，调用library中定义的减法函数，计算结果为'5'。点击'英文'、'中文'时，分别调用library中定义的SharedLibraryConstants类中的'Hello'、'你好'。
    
    实现效果：
    

#### 总结

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