---
title: material - ç©æ API
sidebar_position: 2
---
> **@types** [IPublicApiMaterial](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/api/material.ts)
> **@since** v1.0.0
## 模åç®ä»
è´è´£ç©æç¸å
³ç APIï¼å
æ¬èµäº§å
ã设计å¨è¾
å©å±ãç©æå
æ°æ®åç©æå
æ°æ®ç®¡é彿°ã
## åé
### componentsMap
è·åç»ä»¶ map ç»æ
```typescript
/**
* è·åç»ä»¶ map ç»æ
* get map of components
*/
get componentsMap(): { [key: string]: IPublicTypeNpmInfo | ComponentType | object } ;
```
ç¸å
³ç±»åï¼[IPublicTypeNpmInfo](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/npm-info.ts)
## æ¹æ³
### èµäº§å
#### setAssets
设置ã[èµäº§å
](/site/docs/specs/lowcode-spec#2-åè®®ç»æ)ãç»æ
```typescript
/**
* 设置ãèµäº§å
ãç»æ
* set data for Assets
* @returns void
*/
setAssets(assets: IPublicTypeAssetsJson): void;
```
ç¸å
³ç±»åï¼[IPublicTypeAssetsJson](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/assets-json.ts)
##### 示ä¾
ç´æ¥å¨é¡¹ç®ä¸å¼ç¨ npm å
```javascript
import { material } from '@alilc/lowcode-engine';
import assets from '@alilc/mc-assets-/assets.json';
material.setAssets(assets);
```
éè¿æ¥å£å¨æå¼å
¥èµäº§å
```typescript
import { material, plugins } from '@alilc/lowcode-engine';
import { IPublicModelPluginContext } from '@alilc/lowcode-types';
// 卿å è½½ assets
plugins.register((ctx: IPublicModelPluginContext) => {
return {
name: 'ext-assets',
async init() {
try {
// å°ä¸è¿°é¾æ¥æ¿æ¢ä¸ºæ¨çç©ææè¿°å°åå³å¯ã
const res = await window.fetch('https://fusion.alicdn.com/assets/[email protected]/assets.json');
const assets = await res.text();
material.setAssets(assets);
} catch (err) {
console.error(err);
};
},
};
}).catch(err => console.error(err));
```
#### getAssets
è·åãèµäº§å
ãç»æ
```typescript
/**
* è·åãèµäº§å
ãç»æ
* get AssetsJson data
* @returns IPublicTypeAssetsJson
*/
getAssets(): IPublicTypeAssetsJson;
```
ç¸å
³ç±»åï¼[IPublicTypeAssetsJson](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/assets-json.ts)
##### 示ä¾
```typescript
import { material } from '@alilc/lowcode-engine';
material.getAssets();
```
#### loadIncrementalAssets
å è½½å¢éçãèµäº§å
ãç»æï¼è¯¥å¢éå
ä¼ä¸åæçåå¹¶
```typescript
/**
* å è½½å¢éçãèµäº§å
ãç»æï¼è¯¥å¢éå
ä¼ä¸åæçåå¹¶
* load Assets incrementally, and will merge this with exiting assets
* @param incrementalAssets
* @returns
*/
loadIncrementalAssets(incrementalAssets: IPublicTypeAssetsJson): Promise;
```
ç¸å
³ç±»åï¼[IPublicTypeAssetsJson](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/assets-json.ts)
##### 示ä¾
```typescript
import { material } from '@alilc/lowcode-engine';
import assets1 from '@alilc/mc-assets-/assets.json';
import assets2 from '@alilc/mc-assets-/assets.json';
material.setAssets(assets1);
material.loadIncrementalAssets(assets2);
```
### 设计å¨è¾
å©å±
#### addBuiltinComponentAction
å¨è®¾è®¡å¨è¾
å©å±å¢å ä¸ä¸ªæ©å± action
```typescript
/**
* å¨è®¾è®¡å¨è¾
å©å±å¢å ä¸ä¸ªæ©å± action
* add an action button in canvas context menu area
* @param action
*/
addBuiltinComponentAction(action: IPublicTypeComponentAction): void;
```
ç¸å
³ç±»åï¼[IPublicTypeComponentAction](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/component-action.ts)
##### 示ä¾
æ°å¢è®¾è®¡æ©å±ä½ï¼å¹¶ç»å®äºä»¶
```typescript
import { material } from '@alilc/lowcode-engine';
material.addBuiltinComponentAction({
name: 'myIconName',
content: {
icon: () => 'x',
title: 'hover title',
action(node) {
console.log('myIconName æ©å±ä½è¢«ç¹å»');
}
},
important: true,
condition: true,
});
```

#### removeBuiltinComponentAction
ç§»é¤è®¾è®¡å¨è¾
å©å±çæå® action
```typescript
/**
* ç§»é¤è®¾è®¡å¨è¾
å©å±çæå® action
* remove a builtin action button from canvas context menu area
* @param name
*/
removeBuiltinComponentAction(name: string): void;
```
##### å
置设计å¨è¾
å© name
- removeï¼å é¤
- hideï¼éè
- copyï¼å¤å¶
- lockï¼éå®ï¼ä¸å¯ç¼è¾
- unlockï¼è§£éï¼å¯ç¼è¾
##### 示ä¾
```typescript
import { material } from '@alilc/lowcode-engine';
material.removeBuiltinComponentAction('myIconName');
```
#### modifyBuiltinComponentAction
ä¿®æ¹å·²æç设计å¨è¾
å©å±çæå® action
```typescript
/**
* ä¿®æ¹å·²æç设计å¨è¾
å©å±çæå® action
* modify a builtin action button in canvas context menu area
* @param actionName
* @param handle
*/
modifyBuiltinComponentAction(
actionName: string,
handle: (action: IPublicTypeComponentAction) => void,
): void;
```
ç¸å
³ç±»åï¼[IPublicTypeComponentAction](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/component-action.ts)
##### å
置设计å¨è¾
å© name
- removeï¼å é¤
- hideï¼éè
- copyï¼å¤å¶
- lockï¼éå®ï¼ä¸å¯ç¼è¾
- unlockï¼è§£éï¼å¯ç¼è¾
##### 示ä¾
ç»åå§ç remove æ©å±æ¶é´æ·»å æ§è¡ååçæ¥å¿
```typescript
import { material } from '@alilc/lowcode-engine';
material.modifyBuiltinComponentAction('remove', (action) => {
const originAction = action.content.action;
action.content.action = (node) => {
console.log('before reomve!');
originAction(node);
console.log('after remove!');
}
});
```
### ç©æå
æ°æ®
#### getComponentMeta
è·åæå®åç§°çç©æå
æ°æ®
```typescript
/**
* è·åæå®åç§°çç©æå
æ°æ®
* get component meta by component name
* @param componentName
* @returns
*/
getComponentMeta(componentName: string): IPublicModelComponentMeta | null;
```
ç¸å
³ç±»åï¼[IPublicModelComponentMeta](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/model/component-meta.ts)
##### 示ä¾
```typescript
import { material } from '@alilc/lowcode-engine';
material.getComponentMeta('Input');
```
#### getComponentMetasMap
è·åææå·²æ³¨åçç©æå
æ°æ®
```typescript
/**
* è·åææå·²æ³¨åçç©æå
æ°æ®
* get map of all component metas
* @returns
*/
getComponentMetasMap(): Map;
```
ç¸å
³ç±»åï¼[IPublicModelComponentMeta](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/model/component-meta.ts)
##### 示ä¾
```typescript
import { material } from '@alilc/lowcode-engine';
material.getComponentMetasMap();
```
#### refreshComponentMetasMap
å·æ° componentMetasMapï¼å¯è§¦å模æå¨éç components éæ°æå»º
**@since v1.1.7**
```typescript
refreshComponentMetasMap(): void;
```
### ç©æå
æ°æ®ç®¡é彿°
#### registerMetadataTransducer
注åç©æå
æ°æ®ç®¡é彿°ï¼å¨ç©æä¿¡æ¯åå§åæ¶æ§è¡ã
```typescript
/**
* 注åç©æå
æ°æ®ç®¡é彿°ï¼å¨ç©æä¿¡æ¯åå§åæ¶æ§è¡ã
* register transducer to process component meta, which will be
* excuted during component meta`s initialization
* @param transducer
* @param level
* @param id
*/
registerMetadataTransducer(
transducer: IPublicTypeMetadataTransducer,
level?: number,
id?: string | undefined
): void;
```
##### 示ä¾
ç»æ¯ä¸ä¸ªç»ä»¶çé
置添å é«çº§é
ç½®é¢æ¿ï¼å
¶ä¸æä¸ä¸ªæ¯å¦æ¸²æé
置项
```typescript
import { material } from '@alilc/lowcode-engine'
function addonCombine(metadata: TransformedComponentMetadata) {
const { componentName, configure = {} } = metadata;
const advanceGroup = [];
const combined: FieldConfig[] = [];
advanceGroup.push({
name: getConvertedExtraKey('condition'),
title: { type: 'i18n', 'zh-CN': 'æ¯å¦æ¸²æ', 'en-US': 'Condition' },
defaultValue: true,
setter: [
{
componentName: 'BoolSetter',
},
{
componentName: 'VariableSetter',
},
],
extraProps: {
display: 'block',
},
});
combined.push({
name: '#advanced',
title: { type: 'i18n', 'zh-CN': 'é«çº§', 'en-US': 'Advanced' },
items: advanceGroup,
});
return {
...metadata,
configure: {
...configure,
combined,
},
};
}
material.registerMetadataTransducer(addonCombine, 1, 'parse-func');
```
#### getRegisteredMetadataTransducers
è·åææç©æå
æ°æ®ç®¡é彿°
```typescript
/**
* è·åææç©æå
æ°æ®ç®¡é彿°
* get all registered metadata transducers
* @returns {IPublicTypeMetadataTransducer[]}
*/
getRegisteredMetadataTransducers(): IPublicTypeMetadataTransducer[];
```
##### 示ä¾
```typescript
import { material } from '@alilc/lowcode-engine'
material.getRegisteredMetadataTransducers();
```
## äºä»¶
### onChangeAssets
çå¬ assets ååçäºä»¶
```typescript
/**
* çå¬ assets ååçäºä»¶
* add callback for assets changed event
* @param fn
*/
onChangeAssets(fn: () => void): IPublicTypeDisposable;
```
ç¸å
³ç±»åï¼[IPublicTypeDisposable](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/disposable.ts)
##### 示ä¾
```typescript
import { material } from '@alilc/lowcode-engine';
material.onChangeAssets(() => {
console.log('asset changed');
});
```