Разработка Vue.js-приложения для 1С-Битрикс
Вопрос «как интегрировать Vue в Битрикс» возникает, когда стандартные компоненты на jQuery и серверном рендеринге перестают справляться с интерактивностью. Битрикс не предоставляет готового механизма для Vue, но платформа достаточно гибкая, чтобы Vue-приложение работало органично — через REST API или кастомные AJAX-обработчики.
Архитектурные варианты
Виджет на странице — Vue-приложение монтируется в конкретный DOM-элемент внутри Битрикс-страницы. Остальной сайт работает как обычно. Подходит для изолированных интерактивных блоков: калькуляторы, конфигураторы, формы с логикой.
SPA с Битрикс как бэкендом — Vue-приложение занимает всю страницу, данные получает через REST API или /bitrix/services/main/ajax.php. Шаблон Битрикс рендерит минимальный HTML с точкой монтирования и передаёт начальные данные через window.__INITIAL_STATE__.
Гибридный вариант — Bitrix рендерит серверную часть, Vue управляет интерактивными блоками. Актуален при необходимости SEO-индексации контента без SSR.
Передача данных из Битрикс в Vue
Сервер передаёт начальные данные в шаблоне компонента:
// В шаблоне Битрикс (.php)
$APPLICATION->addHeadScript(
'<script>window.__BITRIX_STATE__ = ' . json_encode([
'userId' => $USER->GetID(),
'catalogId' => $arResult['IBLOCK_ID'],
'currency' => CCurrency::GetByID('RUB'),
]) . ';</script>'
);
Во Vue-приложении:
const state = window.__BITRIX_STATE__ || {}
Это избегает лишнего AJAX-запроса при первой загрузке.
Сборка и подключение
Vite или Webpack — под Битрикс удобнее Vite из-за скорости и простоты конфигурации:
// vite.config.js
export default {
build: {
outDir: 'local/templates/main/vue-dist',
rollupOptions: {
input: { app: 'src/main.js' }
}
}
}
Скомпилированный бандл подключается в шаблоне Битрикс через $APPLICATION->AddHeadScript() или Asset::getInstance()->addJs(). Не используйте <script> напрямую в шаблоне — Битрикс может перемешать порядок подключения скриптов.
REST API Битрикс для Vue
Битрикс REST API (модуль rest) — стандартный путь для запросов из Vue. Для интернет-магазина ключевые методы:
-
catalog.product.list— список товаров -
sale.order.add— создание заказа -
crm.contact.add— добавление контакта в CRM
Для нестандартных операций — кастомные методы через \Bitrix\Rest\RestManager::addMethod() или AJAX-обработчики на /bitrix/services/main/ajax.php с \Bitrix\Main\Engine\Controller.
Случай из практики
Дилерский портал: каталог запчастей с фильтрацией по 15 параметрам. Стандартный компонент catalog.section с AJAX-фильтром тормозил при 50 000+ позиций — каждое изменение фильтра вызывало полный серверный рендеринг. Решение: замена на Vue-приложение с debounced-запросами к кастомному REST-методу, возвращающему JSON. Серверный рендеринг остался только для первой загрузки с SEO-контентом. Время реакции фильтра сократилось с 2–3 секунд до 300–500 мс.
Управление состоянием
Для простых виджетов — reactive() Vue 3 или ref(). Для SPA с авторизацией, корзиной, личным кабинетом — Pinia (официальная замена Vuex для Vue 3). Vuex актуален только если проект уже на Vue 2.
Сроки выполнения
| Тип приложения | Срок разработки |
|---|---|
| Виджет (калькулятор, форма) | от 1 до 3 рабочих дней |
| Каталог с фильтрацией | от 5 до 10 рабочих дней |
| SPA (каталог + корзина + ЛК) | от 15 до 30 рабочих дней |
Сроки зависят от наличия готового REST API и сложности бизнес-логики.







