Skip to content

Отличия API от версии Vue3 ​

Эта библиотека делит чистые функции core из @lh-ui/share с @lh-ui/vue3 (plus), имена Props и событий в основном совпадают. Ниже — неизбежные отличия, обусловленные целевыми платформами uni-app; для всех API, не перечисленных здесь, поведение совпадает с версией для Vue3.

icon: шрифт вместо инлайн SVG ​

Версия для Vue3 (plus)Эта библиотека
Способ рендерингаИнлайн <svg><path><text class="lh-iconfont lh-iconfont--<name>">
ЦветcurrentColor (наследуется от родительского color)Явный prop color / родительский color (цвет шрифта CSS, семантически эквивалентно)
Размерprop sizeprop size (устанавливает font-size)

Mini Program не поддерживает тег <svg>, поэтому на этапе сборки набор SVG path из share преобразуется в шрифт iconfont (base64 встранивается в iconfont.css; 37 иконок, 24×24, однотонные). Визуально это те же глифы, но по сути — шрифт, поэтому в CSS нельзя использовать fill / stroke, только color.

input: стиль плейсхолдера через props ​

MP не поддерживает псевдоэлемент ::placeholder. Стиль плейсхолдера задаётся через props:

vue
<lh-input placeholder="Введите текст" placeholder-style="color: #999" />
propОписание
placeholder-styleСтрока инлайновых стилей для текста плейсхолдера
placeholder-classИмя класса для текста плейсхолдера (взаимоисключающий со style)

Остальной API (v-model, maxlength, подсчёт символов show-word-limit, type) совпадает с версией для Vue3.

select / dialog / tooltip: настольные возможности только на H5 ​

ВозможностьH5WeChat Mini Program
Клавиатурная навигация (стрелки / Enter / Esc)✅❌ Удаляется на этапе компиляции
focus-trap (контур фокуса в диалоге)✅❌ Не вызывается на этапе компиляции
lockScroll (блокировка прокрутки фона)✅❌ (fallback — перехват кликов маской)
Срабатывание по hover (tooltip)✅❌, заменено на click / touchstart

trigger у tooltip: по-прежнему поддерживает 'click' | 'hover', но в Mini Program у hover нет семантики — на платформе MP используйте trigger="click" (или значение по умолчанию), срабатывание по клику / касанию.

События select не меняются (update:modelValue / change / visible-change), но «очистить» и «выбрать» в MP можно только кликом по элементу listbox, клавиатурного пути нет.

message / loading: паттерн точки монтирования ​

Это самое большое отличие в способе использования. В версии для Vue3 — createApp + mount в document.body, вызов — и сообщение появляется; в Mini Program нет document, поэтому сначала нужно разместить компоненты-точки монтирования:

vue
<!-- Разместить один раз на странице -->
<lh-message />
<lh-loading />
ts
const { success, closeAll } = useLhMessage()
const loading = useLhLoading()

loading.show({ text: 'Загрузка...' })
// ...
loading.close()

См. подробнее в Установка - Императивные сервисы требуют точку монтирования.

Компонент Notification отсутствует в первом выпуске

В версии для Vue3 есть lh-notification, в этой библиотеке первого выпуска его нет (низкая ценность в Mini Program, уведомления обычно идут через системные возможности). Если нужно уведомление-подсказка, используйте lh-message.

config-provider: тёмная тема через класс, а не через document ​

Версия для Vue3Эта библиотека
Переключение тёмной темыДобавление класса на document.documentElementДобавление класса dark на оборачивающий узел (в Mini Program нет document)
prop theme'light' | 'dark'Так же (внутренняя реализация отличается)

Способ применения не меняется: <lh-config-provider :theme="dark">. В theme/index.css этой библиотеки тёмные переменные висят на page.dark, .dark, поэтому область действия тёмной темы определяется оборачивающим узлом ConfigProvider.

Единицы измерения: px без преобразования ​

Эта библиотека не делает px→rpx преобразование, стили отдаются напрямую в px — так же, как в wot-design-uni / uview-plus / uni-ui / TDesign и других популярных библиотеках компонентов для uni (официальный компилятор uni тоже не преобразует px→rpx автоматически). Если в проекте подключён плагин вроде postcss-px-to-rpx, артефакты библиотеки будут преобразованы вместе с остальным кодом, дополнительно ничего делать не нужно.

Опции Mini Program, объявленные в SFC компонентов ​

В SFC каждого компонента объявлено:

ts
defineOptions({
  name: 'LhXxx',
  options: { virtualHost: true, addGlobalClass: true, styleIsolation: 'shared' },
})
  • virtualHost: true — компонент не создаёт лишних оборачивающих узлов, custom-class / customStyle попадают на целевой элемент.
  • addGlobalClass: true — внутри компонента можно использовать глобальные стили (app.wxss / стили страницы).
  • styleIsolation: 'shared' — разделяемый режим изоляции стилей: стили компонента и страницы видят друг друга.

Пользователю не нужно дополнительно настраивать эти три опции в pages.json или проекте — они уже объявлены в json самого компонента. Если со стилями компонента что-то не так (классы на месте, а стили не применяются), сначала проверьте, не переопределяет ли настройка styleIsolation на уровне проекта компонентное объявление.