From 350d4b059655f4fd7c9b87d3732ea28f6ba10285 Mon Sep 17 00:00:00 2001 From: Haoming Luo Date: Mon, 31 Jul 2023 11:28:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9'=E5=AF=BC=E5=87=BAHSP?= =?UTF-8?q?=E5=86=85=E8=B5=84=E6=BA=90'=E9=83=A8=E5=88=86=E8=A1=A8?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Haoming Luo --- .../application-dev/quick-start/in-app-hsp.md | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/zh-cn/application-dev/quick-start/in-app-hsp.md b/zh-cn/application-dev/quick-start/in-app-hsp.md index 2ee4cea226..48d1bfd78f 100644 --- a/zh-cn/application-dev/quick-start/in-app-hsp.md +++ b/zh-cn/application-dev/quick-start/in-app-hsp.md @@ -82,20 +82,19 @@ export { MyTitleBar } from './components/MyTitleBar' ``` #### 通过$r访问HSP中资源 -在组件中,经常需要使用到字符串、颜色值、图片等资源。`HSP`中的组件同样需要使用资源,我们一般将其使用的资源放在HSP包内,以符合高内聚低耦合的原则,同时使得多处调用时资源可以只维持一个拷贝。若要使用到HSP中资源,可以像以上代码一样,通过`$r`/`$rawfile`可以使用本模块`resources`目录下的资源。 +在组件中,经常需要使用字符串、图片等资源。`HSP`中的组件需要使用资源时,一般将其所用资源放在HSP包内,以符合高内聚低耦合的原则。可以通过`$r`/`$rawfile`访问本模块`resources`目录下的资源。 不推荐使用相对路径的方式,容易引用错误路径。例如: 在`HSP`模块中使用`Image("common/example.png")`,实际上该`Image`组件访问的是`HSP调用方`(如`entry`)下的资源`entry/src/main/ets/common/example.png`。 ### 导出HSP中资源 -HSP内资源有时也需要在外部其它包中直接调用,这时可以使用一个类来提供对外导出资源的接口,该方案的好处是: -- HSP开发者可以控制自己需要导出的资源,不需要对外暴露的资源可以不用导出 -- 使用方无须感知HSP内部的资源名称,HSP内部的资源名称变化时也不需要使用方跟着修改 +跨包访问HSP内资源时,推荐实现一个资源管理类,以封装对外导出的资源,通过该方式: +- HSP开发者可以控制自己需要导出的资源,不需要对外暴露的资源可以不用导出; +- 使用方无须感知HSP内部的资源名称,HSP内部的资源名称变化时也不需要使用方跟着修改。 其具体实现如下: -封装对外提供资源的接口类: -注:用`$r`方法返回的是Resource对象形式的资源,可以被组件直接使用,但在一般场景下要对其进行解封装才能直接使用,这时需要另写函数获取解封装后资源。 +封装对外提供资源的资源管理类: ```ts // library/src/main/ets/ResManager.ets export class ResManager{ @@ -105,10 +104,6 @@ export class ResManager{ static getDesc(){ return $r("app.string.shared_desc"); } - static getDescStr(){ - // 先通过当前上下文获取hsp模块的上下文,再获取hsp模块的resourceManager,然后再调用resourceManager的接口获取Resource对象中资源(返回值为异步结果Promise对象) - return getContext().resourceManager.getStringValue($r("app.string.shared_desc")); - } } ``` @@ -167,13 +162,13 @@ struct Index { Log.info("add button click!"); this.message = "result: " + add(1, 2); }) - // ResManager返回Resource对象 Image(ResManager.getPic()) .width("100%") Button('getStringValue') .onClick(()=> { - // ResManager返回Promise对象(Resource对象解封装结果) - ResManager.getDescStr() + // 先通过当前上下文获取hsp模块的上下文,再获取hsp模块的resourceManager,然后再调用resourceManager的接口获取资源 + // 注:用`$r`方法获得的是Resource对象形式的资源,其可被组件直接使用,但在此须对其进行解封装才可使用 + getContext().createModuleContext('library').resourceManager.getStringValue(ResManager.getDesc()) .then(value => { console.log("getStringValue is " + value); }) -- GitLab