• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.pluginComponent (PluginComponentManager)
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @dutie123-->
5<!--Designer: @lmleon-->
6<!--Tester: @fredyuan0912-->
7<!--Adviser: @HelloCrease-->
8
9用于给插件组件的使用方请求组件与数据,使用方发送组件模板和数据。
10
11> **说明:**
12>
13> - 本模块首批接口从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14
15## 导入模块
16
17```ts
18import { pluginComponentManager } from '@kit.ArkUI';
19```
20
21## PluginComponentTemplate
22
23Plugin组件模板参数。
24
25**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
26
27**系统能力:** SystemCapability.ArkUI.ArkUI.Full
28
29| 名称    | 类型   | 只读 | 可选 | 说明                        |
30| ------- | ------ | ---- | ---- | --------------------------- |
31| source  | string | 否 | 否 | 组件模板名。                |
32| ability | string | 否 | 否 | 提供方Ability的bundleName。 |
33
34## pluginComponentManager
35
36插件组件管理器。
37
38### KVObject
39
40type KVObject = { [key: string]: number | string | boolean | [] | KVObject }
41
42以键值对形式存储信息,符合json格式。
43
44**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
45
46**系统能力:** SystemCapability.ArkUI.ArkUI.Full
47
48| 名称    | 类型   | 必填 | 说明                        |
49| ------- | ------ | ---- | --------------------------- |
50|  [key: string]  | number \| string \| boolean \| [] \| [KVObject](#kvobject)  | 是   | 键值对形式存储。<br/>number:键值,表示值类型为数字。<br/> string:键值,表示值类型为字符串,可取空字符串。<br/> boolean:键值,表示值类型为布尔值。<br/> []:键值,可取值为[]。<br/>[KVObject](#kvobject):键值,表示值类型为KVObject。            |
51
52
53### PushParameters
54
55使用PluginManager.Push方法时需要传递的参数。
56
57**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
58
59**系统能力:** SystemCapability.ArkUI.ArkUI.Full
60
61| 名称        | 类型                               | 只读 | 可选   | 说明                                       |
62| --------- | ----------------------------------- | ---- | ---- | ---------------------------------------- |
63| want      | [Want](../apis-ability-kit/js-apis-application-want.md) | 否 | 否    | 组件使用方Ability信息。                          |
64| name      | string                              | 否 | 否    | 组件名称。                                    |
65| data      | [KVObject](#kvobject)               | 否 | 否    | 组件数据。                                   |
66| extraData | [KVObject](#kvobject)               | 否 | 否    | 附加数据。                                   |
67| jsonPath  | string                              | 否 | 是    | 存放模板路径的[external.json](#externaljson文件说明)文件的路径。 |
68
69### RequestParameters
70
71使用PluginManager.Request方法时需要传递的参数。
72
73**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
74
75**系统能力:** SystemCapability.ArkUI.ArkUI.Full
76
77| 名称       | 类型                               | 只读 | 可选 | 说明                                       |
78| -------- | ----------------------------------- | ---- | ---- |---------------------------------------- |
79| want     | [Want](../apis-ability-kit/js-apis-application-want.md) | 否 | 否    | 组件提供方Ability信息。                          |
80| name     | string                              | 否 | 否    | 请求组件名称。                                  |
81| data     | [KVObject](#kvobject)               | 否 | 否    | 组件数据。                                    |
82| jsonPath | string                              | 否 | 是    | 存放模板路径的[external.json](#externaljson文件说明)文件的路径。当jsonPath字段不为空时不触发Request通信。 |
83
84### RequestCallbackParameters
85
86PluginManager.Request方法接收到的回调结果。
87
88**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
89
90**系统能力:** SystemCapability.ArkUI.ArkUI.Full
91
92| 名称              | 类型                                      | 只读 | 可选 | 说明  |
93| ----------------- | ---------------------------------------- | ---- | ---- | ----- |
94| componentTemplate | [PluginComponentTemplate](#plugincomponenttemplate) | 否 | 否    | 组件模板。 |
95| data              | [KVObject](#kvobject)                    | 否 | 否    | 组件数据。 |
96| extraData         | [KVObject](#kvobject)                    | 否 | 否    | 附加数据。 |
97
98### RequestEventResult
99
100注册Request监听方法后,接收到请求事件时回应请求的数据类型。
101
102**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
103
104**系统能力:** SystemCapability.ArkUI.ArkUI.Full
105
106| 名称       | 类型                  | 只读 | 可选  | 说明    |
107| --------- | --------------------- | ---- | ---- | ----- |
108| template  | string                | 否 | 是    | 组件模板。 |
109| data      | [KVObject](#kvobject) | 否 | 是    | 组件数据。 |
110| extraData | [KVObject](#kvobject) | 否 | 是    | 附加数据。 |
111
112### OnPushEventCallback
113
114type OnPushEventCallback = (source: Want, template: PluginComponentTemplate, data: KVObject,
115    extraData: KVObject) => void
116
117对应Push事件的监听回调函数。
118
119**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
120
121**系统能力:** SystemCapability.ArkUI.ArkUI.Full
122
123**参数:**
124
125| 参数名        | 类型                                       | 必填   | 说明                     |
126| --------- | ---------------------------------------- | ---- | ---------------------- |
127| source    | [Want](../apis-ability-kit/js-apis-application-want.md)      | 是    | Push请求发送方相关信息。         |
128| template  | [PluginComponentTemplate](#plugincomponenttemplate) | 是    | 请求组件模板名称。 |
129| data      | [KVObject](#kvobject)                    | 是    | 数据。                    |
130| extraData | [KVObject](#kvobject)                    | 是    | 附加数据。                  |
131
132**示例:**
133
134```ts
135import { pluginComponentManager, PluginComponentTemplate } from '@kit.ArkUI';
136import { Want } from '@kit.AbilityKit';
137
138function onPushListener(source: Want, template: PluginComponentTemplate, data: pluginComponentManager.KVObject, extraData: pluginComponentManager.KVObject) {
139  console.info("onPushListener template.source=" + template.source);
140  console.info("onPushListener source=" + JSON.stringify(source));
141  console.info("onPushListener template=" + JSON.stringify(template));
142  console.info("onPushListener data=" + JSON.stringify(data));
143  console.info("onPushListener extraData=" + JSON.stringify(extraData));
144}
145```
146
147
148### OnRequestEventCallback
149
150type OnRequestEventCallback = (source: Want, name: string, data: KVObject) => RequestEventResult
151
152对应request事件的监听回调函数。
153
154**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
155
156**系统能力:** SystemCapability.ArkUI.ArkUI.Full
157
158**参数:**
159
160| 参数名        | 类型                                  | 必填   | 说明                |
161| --------- | ----------------------------------- | ---- | ----------------- |
162| source    | [Want](../apis-ability-kit/js-apis-application-want.md) | 是    | request请求发送方相关信息。 |
163| name      | string                              | 是    | 模板名称。             |
164| data | [KVObject](#kvobject)               | 是    | 数据。             |
165
166**返回值:**
167
168| 类型                                       | 说明                                                       |
169| ---------------------------------------- | --------------------------------------------------------- |
170| [RequestEventResult](#requesteventresult) | 注册Request监听方法后,接收到请求事件时回应请求的数据类型。 |
171
172**示例:**
173
174```ts
175import { pluginComponentManager } from '@kit.ArkUI';
176import { Want } from '@kit.AbilityKit';
177
178function onRequestListener(source: Want, name: string, data: pluginComponentManager.KVObject) {
179  console.info("onRequestListener");
180  console.info("onRequestListener source=" + JSON.stringify(source));
181  console.info("onRequestListener name=" + name);
182  console.info("onRequestListener data=" + JSON.stringify(data));
183  let RtnData: Record<string, string | pluginComponentManager.KVObject> = {
184    'template': "ets/pages/plugin.js",
185    'data': data,
186  }
187  return RtnData;
188}
189```
190
191### pluginComponentManager.push
192
193push(param: PushParameters , callback: AsyncCallback&lt;void&gt;): void
194
195组件提供方向组件使用方主动发送组件和数据。
196
197**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
198
199**系统能力:** SystemCapability.ArkUI.ArkUI.Full
200
201**参数:**
202| 参数名      | 类型                                | 必填   | 说明           |
203| -------- | --------------------------------- | ---- | ------------ |
204| param    | [PushParameters](#pushparameters) | 是    | 组件使用方的详细信息。  |
205| callback | AsyncCallback&lt;void&gt;         | 是    | 此次接口调用的异步回调。 |
206
207**示例:**
208
209```ts
210import { pluginComponentManager } from '@kit.ArkUI';
211
212pluginComponentManager.push(
213  {
214    want: {
215      bundleName: "com.example.provider",
216      abilityName: "com.example.provider.MainAbility",
217    },
218    name: "plugintemplate",
219    data: {
220      "key_1": "plugin component test",
221      "key_2": 34234,
222    },
223    extraData: {
224      "extra_str": "this is push event",
225    },
226    jsonPath: "",
227  },
228  (err) => {
229    console.info("push_callback: push ok!");
230  }
231)
232```
233
234### pluginComponentManager.request
235
236request(param: RequestParameters, callback: AsyncCallback&lt;RequestCallbackParameters&gt;): void
237
238组件使用方向组件提供方主动请求组件。
239
240**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
241
242**系统能力:** SystemCapability.ArkUI.ArkUI.Full
243
244
245**参数:**
246
247| 参数名   | 类型                                                         | 必填 | 说明                                                         |
248| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
249| param    | [RequestParameters](#requestparameters)                      | 是   | 组件模板的详细请求信息。                                     |
250| callback | AsyncCallback&lt;[RequestCallbackParameters](#requestcallbackparameters)&gt; | 是   | 此次请求的异步回调,通过回调接口的参数返回接收请求的数据。 |
251
252**示例:**
253
254```ts
255import { pluginComponentManager } from '@kit.ArkUI';
256
257pluginComponentManager.request(
258  {
259    want: {
260      bundleName: "com.example.provider",
261      abilityName: "com.example.provider.MainAbility",
262    },
263    name: "plugintemplate",
264    data: {
265      "key_1": "plugin component test",
266      "key_2": 1111111,
267    },
268    jsonPath: "",
269  },
270  (err, data) => {
271    console.info("request_callback: componentTemplate.ability=" + data.componentTemplate.ability);
272    console.info("request_callback: componentTemplate.source=" + data.componentTemplate.source);
273    console.info("request_callback: data=" + JSON.stringify(data.data));
274    console.info("request_callback: extraData=" + JSON.stringify(data.extraData));
275  }
276)
277```
278
279### pluginComponentManager.on
280
281on(eventType: string, callback: OnPushEventCallback | OnRequestEventCallback ): void
282
283提供方监听"request"类型的事件,给使用方返回通过request接口主动请求的数据;使用方监听"push"类型的事件,接收提供方通过push接口主动推送的数据。
284
285**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
286
287**系统能力:** SystemCapability.ArkUI.ArkUI.Full
288
289**参数:**
290
291| 参数名       | 类型                                       | 必填   | 说明                                       |
292| --------- | ---------------------------------------- | ---- | ---------------------------------------- |
293| eventType | string                                   | 是    | 监听的事件类型,&nbsp;可选值为:"push"&nbsp;、"request"。<br/>"push”:指组件提供方向使用方主动推送数据。<br/>"request”:指组件使用方向提供方主动请求数据。 |
294| callback  | [OnPushEventCallback](#onpusheventcallback)&nbsp;\|&nbsp;[OnRequestEventCallback](#onrequesteventcallback) | 是    | 对应监听回调,push事件对应回调类型为[OnPushEventCallback](#onpusheventcallback),request事件对应回调类型为[OnRequestEventCallback](#onrequesteventcallback) 。 |
295
296**示例:**
297
298```ts
299import { pluginComponentManager, PluginComponentTemplate } from '@kit.ArkUI';
300import { Want } from '@kit.AbilityKit';
301
302function onPushListener(source:Want, template:PluginComponentTemplate, data:pluginComponentManager.KVObject, extraData:pluginComponentManager.KVObject) {
303  console.info("onPushListener template.source=" + template.source);
304  console.info("onPushListener source=" + JSON.stringify(source));
305  console.info("onPushListener template=" + JSON.stringify(template));
306  console.info("onPushListener data=" + JSON.stringify(data));
307  console.info("onPushListener extraData=" + JSON.stringify(extraData));
308}
309function onRequestListener(source:Want, name:string, data:pluginComponentManager.KVObject) {
310  console.info("onRequestListener");
311  console.info("onRequestListener source=" + JSON.stringify(source));
312  console.info("onRequestListener name=" + name);
313  console.info("onRequestListener data=" + JSON.stringify(data));
314  let RtnData:Record<string,string|pluginComponentManager.KVObject> = { 'template': "ets/pages/plugin.js", 'data': data };
315  return RtnData;
316}
317pluginComponentManager.on("push", onPushListener);
318pluginComponentManager.on("request", onRequestListener);
319```
320
321## external.json文件说明
322
323external.json文件由开发者创建。external.json中以键值对形式存放组件名称以及对应模板路径。以组件名称name作为关键字,对应模板路径作为值。
324
325**示例**
326
327```json
328{
329  "PluginProviderExample": "ets/pages/PluginProviderExample.js",
330  "plugintemplate2": "ets/pages/plugintemplate2.js"
331}
332
333```