Vue-uieditor — это онлайн-редактор для разработки на Vue, который позволяет видеть результат сразу после внесения изменений. Он поддерживает синтаксис ES2015 JavaScript и не требует дополнительной компиляции, что позволяет использовать его результаты сразу же.
yarn add vue-uieditor
config.plugin('copy-vue-uieditor-assets').use(CopyWebpackPlugin, [
[{
from: './node_modules/vue-uieditor/vue-uieditor',
to: './vue-uieditor/'
}]
]);
import Vue from 'vue';
import VueUieditor from 'vue-uieditor';
Vue.use(VueUieditor);
<vue-uieditor :options="options" :json="json" :theme="theme" />
<vue-uieditor-render :options="options" :json="json" />
Название | Тип | Значение по умолчанию | Описание |
---|---|---|---|
options | UEOption | Пустое | Параметры UEOption |
json | JSON | Пустое | Содержимое JSON |
tmpl | string | Пустое | HTML-содержимое |
theme | UETheme | Пустое | Тема |
on-ready | Событие | ({service:UEService)=>void | Подготовка к редактированию завершена |
on-change | Событие | ({service:UEService)=>void | Изменение содержимого |
on-select | Событие | (p)=>void; | Выбор |
on-add-component | Событие | (p)=>void; | Добавление содержимого, например, перетаскивание компонента или шаблона |
on-change-mode | Событие | (p)=>void; | Текущий режим изменился (design, json и т. д.) |
Название | Тип | Значение по умолчанию | Описание |
---|---|---|---|
options | UEOption | Пустое | Параметр UEOption |
json | JSON | Пустое | Содержание JSON |
tmpl | string | Пустое | HTML-контент |
mixin | vue mixin | Пустое | Комбинация vue |
query | any | Пустое | Можно использовать $this.$query для получения содержимого |
params | any | Пустое | Можно использовать $this.$params для получения содержимого |
$this — это унифицированный и усиленный объект this, который можно использовать в любом скрипте и рекомендуется использовать этот объект.
Параметры компонента vue-uieditor.
<vue-uieditor :options="options" />
<vue-uieditor-render :options="options" />
options: UEOption = UERender.DefineOption({
mixins:[{
data(){
return {
text:'hello'
};
},
created(){
}
}],
templates: [
{
title: "JSON Object",
group: "Тестовый шаблонный набор/Тестовый шаблон",
json: {
type: "uieditor-div"
},
},
{
title: "Tmpl",
group: "Тестовый шаблонный набор/Тестовый шаблон",
template: `<template>
<uieditor-div>
</uieditor-div>
</template>`,
},
],
async extraLib(){
return `const text:string;`
},
global(){
return {
_:lodash
};
},
transfer:UERender.DefineTransfer({
'uieditor-div': {
"editor": {
text: 'Div 块级标签',
order: 0,
groupOrder:0,
group:'Общий набор компонентов/Базовый компонент',
icon: 'layui-icon layui-icon-template-1',
container: true
}
}
})
});
Название | Тип | Значение по умолчанию | Описание |
---|---|---|---|
mixins | Array | [] | Компоненты Vue, расширяемые внутри компонента, такие как компоненты, директивы или методы и т.д. |
templates | UETemplate | [] | Установите шаблон в дерево слева от редактора |
transfer | UETransfer | {} | Конвертер, определяющий поведение рендеринга json и определяющий атрибуты поведения компонента во время редактирования |
transferBefore | Function | (render: UERenderItem, extend?: UETransferExtend) => UERenderItem | Обработка конвертера перед |
transferAfter | Function | (render: UERenderItem, extend?: UETransferExtend) => UERenderItem | Обработка конвертером после |
extraLib | Function | ()=> Promise | Расширенное объявление кода интеллектуальной подсказки |
http | Function | ()=> object | $http или конфигурация метода источника данных, см. ссылку |
global | Function | ()=> object | Определение глобальных переменных |
babel | Boolean | true | Включить ли Babel |
templates: UETemplate
- 设置模板到编辑器左边树
```ts
options: UEOption = UERender.DefineOption({
...,
templates: [
{
title: "JSON Object",
group: "测试模板库/测试模板",
json: {
type: "uieditor-div"
},
},
{
title: "Tmpl",
group: "测试模板库/测试模板",
template: `<template>
<uieditor-div>
</uieditor-div>
</template>`,
}
]
});
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
title | string | — | 标题 |
icon | string | — | 图标 |
group | string | — | 分组 |
groupOrder | number | — | 分组顺序,同分组的第一个groupOrder生效 |
json | string 或 object | — | json 模板,可以json字串或json对像 |
template | string | — | html 模板,如果有json内容,优先使用json内容 |
moving | Function | (p: any) => boolean | 拖动时处理,返回true |
— 组件主题
<vue-uieditor :theme="theme" />
theme: UETheme = {
modes: ["json", "script", "tmpl"],
toolBar: [
{
title: "测试",
click: ({ service }) => {
this.json = service.getJson();
console.log('json', JSON.stringify(json));
}
}
],
contextmenus({ render, service }) {
return [
{
title: "测 试",
disabled: !render,
click: (item) => {
console.log(
JSON.stringify(service.getJson(false, render) || {})
);
}
}
];
}
};
Наименование | Тип | Значение по умолчанию | Описание |
---|---|---|---|
modes | Array | ['json', 'script', 'tmpl] | Режимы редактора: json, script, tmpl |
toolBar | UEToolBar[] | [] | Настройка панели инструментов |
leftBar | UESideBar | — | Панель инструментов слева (компоненты и шаблоны) |
rightBar | UESideBar | — | Панель инструментов справа (свойства) |
about | Function | ({ service: UEService }): string | Настройка содержимого диалогового окна «О программе» |
contextmenus | Function | ({ render: UERenderItem; parent: UERenderItem; editor: UETransferEditor; service: UEService; }): UEContextmenuItem[] | Контекстное меню выбранного компонента |
— Панель инструментов
theme: UETheme = {
...,
toolBar: [
{
title: "测试",
click: ({ service }) => {
this.json = service.getJson();
console.log('json', JSON.stringify(json));
}
}
]
};
Наименование | Тип | Значение по умолчанию | Описание |
---|---|---|---|
title | string | — | Заголовок, используется для всплывающей подсказки при наличии значка |
icon | string | — | Значок |
divided | boolean | false | Разделительная линия |
disabled | boolean | false | Отключено |
show | boolean | false | Отображать или нет |
click | Метод | (e: any): void | Действие при нажатии |
— Панели инструментов слева и справа
theme: UETheme = {
...,
leftBar: {
show:true,
filter({item}){ return item.name.indexOf('text') >= 0; }
}
};
Наименование | Тип | Значение по умолчанию | Описание |
---|---|---|---|
show | boolean | false | Отображать или нет |
filter | Метод | ({item,all,service}): boolean | Фильтр |
— Ограничение операций редактирования компонентов
/** 标记为不能选择 */
const UECanNotSelectProps = 'ue-cant-select';
/** 标рик за нельзыя перемещать */
const UECanNotMoveProps = 'ue-cant-move';
/** 标рик за нельзя удалять */
const UECanNotRemoveProps = 'ue-cant-remove';
/** 标рик за нельзя копировать */
const UECanNotCopyProps = 'ue-cant-copy';
/** 标рик за нельзя выбирать дочерние элементы */
const UECanNotSelectChildProps = 'ue-cant-select-child';
/** 标рик за нельзя перемещать дочерние элементы */
const UECanNotMoveChildProps = 'ue-cant-move-child';
/** 标рик за нельзя удалять дочерние элементы */
const UECanNotRemoveChildProps = 'ue-cant-remove-child';
/** 标рик за нельзя копировать дочерние элементы */
const UECanNotCopyChildProps = 'ue-cant-copy-child';
/** 标рик за нельзя вставлять дочерние элементы внутрь */
const UECanNotMoveInProps = 'ue-cant-movein';
/** 标рик за нельзя извлекать дочерние элементы наружу */
const UECanNotMoveOutProps = 'ue-cant-moveout';
/** 标рик за узел заблокирован */
const UEIsLockProps = 'ue-is-lock';
/** 标рик за узел свёрнут */
const UEIsCollapseProps = 'ue-is-collapse';
— Конвертер, определяет поведение рендеринга json и поведение компонентов во время редактирования
options: UEOption = UERender.DefineOption({
...,
transfer:UERender.DefineTransfer({
'uieditor-div': {
"editor": {
text: 'Div 块级标签',
order: 0,
groupOrder:0,
group:'公用组件库/基础组件',
icon: 'layui-icon layui-icon-template-1',
container: true
}
}
})
});
``` **Наименование** | **Тип** | **Значение по умолчанию** | **Описание**
| --- | --- | --- |
| type | string | 空 | Компонентное наименование
| editor | UETransferEditor | 空 | Свойства и характеристики поведения компонента при редактировании
| transfer | Function | (render: UERenderItem, extend?: UETransferExtend): UERenderItem | Преобразует render при рендеринге, если возвращает пустое значение — не рендерит
## editor: UETransferEditor
- Свойства и характеристики поведения компонента при редактировании.
```ts
options: UEOption = UERender.DefineOption({
...,
transfer:UERender.DefineTransfer({
'uieditor-div': {
"editor": {
text: 'Div 块级标签',
order: 0,
groupOrder:0,
group:'公用组件库/基础组件',
icon: 'layui-icon layui-icon-template-1',
container: true
}
}
})
});
Наименование | Тип | Значение по умолчанию | Описание |
---|---|---|---|
text | string | ((p: { editor: UETransferEditor, attrs: UETransferEditorAttrs }) => string) | Пустое |
defaultText | string | Пустое | Если text пуст, то это значение по умолчанию |
icon | string | Пустое | Значок |
json | string | Пустое | Содержимое шаблона по умолчанию в формате JSON |
template | string | Пустое | Содержание шаблона по умолчанию в HTML |
order | number | 99 | Сортировка |
group | string | Пустое | Группа, можно использовать «/» для реализации иерархии групп, например: базовая библиотека / базовый компонент |
groupOrder | number | 99 | Групповая сортировка |
base | boolean | true | Является ли базовым компонентом, при редактировании выступает как независимый компонент, дочерние и внучатые узлы не могут быть выбраны и т. д. |
container | boolean | false | Является ли контейнером, например div |
containerBorder | boolean | false | Показывает ли границы контейнера, удобно для позиционирования при редактировании |
controlLeft | boolean | true | Находится ли контейнер слева, чтобы было удобно выбирать, по умолчанию верно для контейнеров |
empty | string | Пустое | Используется чёрный блок вместо отображения компонента при редактировании, что помогает избежать проблем с производительностью при работе с большими компонентами |
collapse | boolean | true | Можно ли свернуть, по умолчанию верно для контейнеров |
select | boolean | true | Можно ли выбрать (редактировать) |
selectChild | boolean | true | Можно ли выбрать дочерний узел (редактировать) |
remove | boolean | true | Можно ли удалить (редактировать) |
removeChild | boolean | true | Можно ли удалить дочерний узел (редактировать) |
draggable | boolean | true | Можно ли перетащить (редактировать) |
draggableChild | boolean | true | Можно ли перетащить дочерний узел (редактировать) |
showInTree | boolean | true | Будет ли отображаться в дереве компонентов |
show | boolean | true | Будет ли отображаться |
inline | boolean | true | Обязательно ли отображать как inline при редактировании |
className | string | Пустое | Временный стиль при редактировании |
placeholderAttr | boolean | false | Есть ли у компонента атрибут placeholder |
disabledAttr | boolean | false | Есть ли у компонента атрибут disabled |
hideAttrs | string[] | [] | Скрытые существующие атрибуты attr, такие как ['class'] |
hideAttrGroups | string[] | [] | Скрытые группы существующих атрибутов |
attrs | UETransferEditorAttrs | Пустое | Устанавливает панель свойств компонента |
coping | Function | (p: { render: UERenderItem; parent: UERenderItem; service: UEService; }) => boolean | Обработка возможности копирования, также может обрабатывать содержимое копирования |
contenting | Function | (p: any) => boolean | Возможность перетаскивания компонента в качестве дочернего узла, генерируется только при редактировании контейнеров |
moving | Function | (p: any) => boolean | Обработчик перемещения, возвращает true или false, определяет, можно ли переместить в цель |
movingChild | Function | (p: any) => boolean | Обработчик перемещения дочерних узлов, возвращает true или false, определяет, можно ли перемещать дочерние узлы |
movingOut | Function | (p: any) => boolean | Обработчик удаления дочерних узлов из текущего узла, возвращает true или false, определяет возможность удаления |
movingIn | Function | (p: any) => boolean | Обработчик добавления дочерних узлов к текущему узлу, возвращает true или false, определяет возможность добавления |
initAttr | Function | (p: any) => void | Инициализация render.attrs при редактировании |
transferAttr | Function | (p: any) => void | Преобразование render и attr при редактировании и рендеринге, преобразованное содержимое будет помещено в JSON |
transferAttrAfter | Function | (p: any) => void | Преобразование render.attrs в render после редактирования |
contextmenu | Function | (p: any) => void | Контекстное меню выбранного объекта |
toolbar | Function | (p: any) => void | Панель инструментов выбранного объекта |
options: UEOption = UERender.DefineOption({
...,
transfer:UERender.DefineTransfer({
'uieditor-img': {
"editor": {
text: "Image 图片",
order: 2,
groupOrder:0,
group:'公用组件库/基础组件',
icon: 'layui-icon layui-icon-picture',
inline: true,
attrs: {
src: {
order: 0,
value: './vue-uieditor/assets/images/demo.png',
effect: true,
},
style: { value: 'min-width:30px;min-height:30px' }
}
}
}
})
});
Наименование | Тип | Значение по умолчанию | Описание |
---|---|---|---|
text | string | Пустое | Отображаемое имя |
value | any | Пустое | Значение по умолчанию |
demoValue | any | Пустое | Заменяет значение при редактировании для обеспечения эффекта отображения и предотвращения ошибок при использовании значения |
editValue | any | Пустое | При переходе в режим расширенного редактирования кода используется для замены значения свойства |
desc | string | Пустое | Описание |
codeBtn | boolean | true | Кнопка редактирования кода по умолчанию |
language | string | javascript | Язык программирования для редактирования кода, например javascript, html |
Свойство | Тип | Значение | Описание |
---|---|---|---|
boolean | boolean | false | Занимает ли строка одну строку |
group | string | Пустая строка | Группа |
groupOrder | number | 99 | Порядок группы, первый в группе — 0 |
order | number | 99 | Последовательность |
show | boolean | true | Отображать ли атрибут |
event | boolean | false | Является ли событием |
vue | boolean | false | Атрибут Vue |
effect | boolean | false | Влияет ли на редактирование |
editorOlny | boolean | false | Используется только в редакторе, в окончательном результате отсутствует |
type | text, slider, slider-only, select, select-only, boolean, boolean-only, number, custom | text | Тип отображения |
typeOption | any | Пустая | Параметры типа отображения, например: type = 'slider', typeOption = {min:1,max:24} |
datas | string[] | Пустая | Источник данных типа отображения, например: type = 'select', datas = ['small', 'large'] |
bind | boolean | false | Связан ли с bind |
enabledBind | boolean | false | Разрешено ли изменять bind |
editorBind | boolean | false | Редактор использует bind, при использовании этой опции легко допустить ошибку |
change | Function | (attr: UETransferEditorAttrsItem, service: UEService) => boolean | Обработка изменений, возврат false прерывает |
Сервис: UEService
— Свойства и поведение компонентов во время редактирования.
options: UEOption = UERender.DefineOption({
...,
transfer:UERender.DefineTransfer({
'uieditor-div': {
"editor": {
text: "Div",
order: 2,
groupOrder:0,
group:'Общедоступная библиотека компонентов/Основные компоненты',
icon: 'layui-icon layui-icon-picture',
inline: true,
transferAttr({ service }) {
console.log('service', service.getJson())
}
}
})
});
Имя | Тип | Значение по умолчанию | Описание |
---|---|---|---|
$uieditor | Vue | Пустое | Получить текущий редактируемый компонент |
options | UEOption | Пустое | Получение текущих параметров |
history | object | Пустое | Получение информации о журнале |
current | object | Пустое | Получает текущую информацию, если выбран id и т. д. |
rootRender | object | Пустое | Получите текущий JSON root |
setModeUI(mode: UEMode): void;
Имя | Тип | Требуется | Значение по умолчанию | Описание |
---|---|---|---|---|
mode | design, json, script, tmpl, preview | Да | design | Режим |
showMonacoEditorOther(option: MonacoEditorContext): Promise<void>
Имя | Тип | Требуется | Значение по умолчанию | Описание |
---|---|---|---|---|
option | MonacoEditorContext | Да | Пустое | Опции |
getTmpl(): string
setTmpl(html:string): Promise<void>
Имя | Тип | Требуется | Значение по умолчанию | Описание |
---|---|---|---|---|
html | string | Да | Пустое | Содержимое шаблона HTML |
getJson(): string
getJson(json:string | object): Promise<void>
Имя | Тип | Требуется | Значение по умолчанию | Описание |
---|---|---|---|---|
json | string, object | Да | Пустое | Содержание JSON |
getScript(): string
setScript(script:string): Promise<void>
Имя | Тип | Требуется | Значение по умолчанию | Описание |
---|---|---|---|---|
script | string | Да | Пустое | Код содержимого |
getCurRender(): UERenderItem
getRenderItem(id: string, context?: UERenderItem): UERenderItem
Имя | Тип | Требуется | Значение по умолчанию | Описание |
---|---|---|---|---|
id | string | Да | Пустое | ID |
context | UERenderItem | Нет | rootRender | Поиск узла контекста |
getRenderByType(type: string, context?: UERenderItem): UERenderItem
Имя | Тип | Требуется | Значение по умолчанию | Описание |
---|---|---|---|---|
type | string | Да | Пустое | Тип |
context | UERenderItem | Нет | rootRender | Искать узел контекста |
getParentRenderItem(render: UERenderItem, all?: boolean): UERenderItem
Имя | Тип | Требуется | Значение по умолчанию | Описание |
---|---|---|---|---|
render | UERenderItem | Да | Пустое | Узел |
all | UERenderItem | Нет | Да | Все содержимое, иначе поиск родительского узла в соответствии с выбором |
getParentRenderByType(render: UERenderItem, type: string): UERenderItem
Имя | Тип | Требуется | Значение по умолчанию | Описание |
---|---|---|---|---|
render | UERenderItem | Да | Пустое | Узел |
static DefineOption(options: UEOption): UEOption;
Наименование | Тип | Обязательность | Значение по умолчанию | Описание |
---|---|---|---|---|
options | UEOption | Да | — | Параметр |
DefineTransfer
static DefineTransfer(transfer: UETransfer): UETransfer;
Наименование | Тип | Обязательность | Значение по умолчанию | Описание |
---|---|---|---|---|
transfer | UETransfer | Да | — | Перенос |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )