Interface: EditorEventsApi
API для управления событиями редактора.
Предоставляет методы для подписки на события (изменения документа, выделения, видимой области и ошибки) и получения уведомлений в режиме реального времени.
Четыре основных события:
editorError— ошибка в редактореdocumentChange— содержимое документа изменилосьselectionChange— курсор или выделение переместилосьviewportChange— видимая область изменилась
Использование:
editorApi.events.subscribe('documentChange', (payload) => {
console.log('Документ изменился');
});
editorApi.events.subscribeOnce('viewportChange', (payload) => {
console.log('Видимая область изменилась один раз');
});
Methods
subscribe()
subscribe<
E>(event,callback):Unsubscribe
Подписывается на событие редактора и вызывает обработчик каждый раз когда событие срабатывает.
Подписка остаётся активной до явной отписки через функцию Unsubscribe.
Type Parameters
E
E extends keyof EditorEvents
Parameters
event
E
Тип события из EventId
callback
Обработчик события (функция с правильной типизацией параметра)
Returns
Функция для отписки от события
Remarks
Типобезопасность:
- TypeScript автоматически проверит тип обработчика
- IDE предоставит автодополнение свойств payload
- Компилятор предупредит об ошибках типов
Когда подписка вызывается:
- Сразу после каждого события (синхронные обработчики)
- После разрешения Promise (асинхронные обработчики)
Отписка:
- Вызовите возвращённую функцию для отписки
- Или сохраните функцию для последующей отписки в
onDestroy
Example
Простая подписка на событие
editorApi.events.subscribe('documentChange', (payload) => {
console.log('Документ изменился:', payload);
});
Подписка с сохранением функции отписки
const unsubscribe = editorApi.events.subscribe('selectionChange', (payload) => {
console.log('Курсор в позиции:', payload);
});
// Позже отписаться
unsubscribe();
Асинхронный обработчик
editorApi.events.subscribe('documentChange', async (payload) => {
// Выполнить асинхронную операцию
await saveToServer();
editorApi.ui.toasts.showToast({ id, content: 'Сохранено' });
});
Подписка на несколько событий
function subscribeEditorEvents: Unsubscribe {
const unsubscribeChange = editorApi.events.subscribe('documentChange', (payload) => {
console.log('Содержимое изменилось');
});
const unsubscribeSelection = editorApi.events.subscribe('selectionChange', (payload) => {
console.log('Выделение изменилось');
});
const unsubscribeError = editorApi.events.subscribe('editorError', (payload) => {
console.error('Ошибка:', payload.error);
});
return () => {
unsubscribeChange();
unsubscribeSelection();
unsubscribeError();
};
}
See
- EditorEventCallback — типизация обработчика
- EventId — доступные события
- Unsubscribe — функция отписки от слежения за событием
subscribeOnce()
subscribeOnce<
E>(event,callback):Unsubscribe
Подписывается на событие, но срабатывает только один раз.
После первого срабатывания событие автоматически отписывается. Возвращённая функция отписки становится неработающей после первого вызова.
Type Parameters
E
E extends keyof EditorEvents
Parameters
event
E
Тип события из EventId
callback
Обработчик события (вызывается максимум один раз)
Returns
Функция для явной отписки (становится недействительной после первого события)
Remarks
Использование:
- Ожидание единовременного события (первое сохранение, инициализация)
- Проверка первого изменения
- Одноразовая обработка
Отличие от on():
on()— подписка остаётся активнойonce()— подписка отменяется после первого события
Обработчик будет вызван:
- Один раз при первом срабатывании события
- Никогда больше, даже если событие случится снова
Example
Одноразовая подписка на изменение документа
editorApi.events.subscribeOnce('documentChange', (payload) => {
console.log('Первое изменение документа');
// Этот обработчик будет вызван только один раз
});
Ожидание ошибки (только первой)
editorApi.events.subscribeOnce('editorError', (payload) => {
console.error('Первая ошибка:', payload.error);
// Даже если произойдут другие ошибки, этот обработчик не будет вызван
});
Проверка первого изменения выделения
const unsubscribe = editorApi.events.subscribeOnce('selectionChange', (payload) => {
console.log('Пользователь первый раз переместил курсор');
editorApi.ui.toasts.showToast({ id, content: 'Курсор активен' });
});
// Можно отписаться явно до первого события
setTimeout(() => {
unsubscribe(); // Отписка произойдёт, но обработчик уже мог быть вызван
}, 5000);
Инициализация при первом изменении видимой области
editorApi.events.subscribeOnce('viewportChange', async (payload) => {
console.log('Сначала загрузить видимый контент');
await loadVisibleContent(payload.viewport);
});
Очистка ресурсов с явной отпиской
const unsubscribe = editorApi.events.subscribeOnce('documentChange', (payload) => {
console.log('Первое изменение');
});
// Если через 10 секунд событие не произойдёт, отписаться
setTimeout(() => {
unsubscribe();
console.log('Подписка отменена вручную');
}, 10000);
See
- EditorEventCallback — типизация обработчика
- EventId — доступные события
- EditorEventsApi.subscribe — для постоянной подписки
- Unsubscribe — функция отписки от слежения за событием