Интеграция Vue.js с шаблоном сайта 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция Vue.js с шаблоном сайта 1С-Битрикс
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция Vue.js с шаблоном сайта 1С-Битрикс

Главная сложность интеграции Vue в шаблон Битрикс — конфликт между глобальным состоянием jQuery-плагинов, которые Битрикс использует повсеместно, и реактивностью Vue. Плюс — порядок загрузки скриптов, который Битрикс контролирует через собственный менеджер ресурсов.

Подключение Vue к шаблону без конфликтов

В header.php шаблона Битрикс добавьте Vue как модуль через asset-менеджер:

\Bitrix\Main\Page\Asset::getInstance()->addJs('/local/templates/main/vue-dist/app.js', true);

Флаг true — скрипт перемещается в конец <body>, это важно для Vue, которому нужен DOM.

Альтернатива — BX.ready(), обёртка Битрикс над DOMContentLoaded:

BX.ready(function() {
    const { createApp } = Vue;
    createApp(App).mount('#vue-app');
});

Точки монтирования в шаблоне

В шаблоне Битрикс (.php-файлы) расставьте div-контейнеры для Vue-виджетов:

// В шаблоне header.php или в нужном месте страницы
<div id="vue-search-widget" data-catalog-id="<?= $catalogId ?>"></div>

Vue-приложение читает атрибуты через el.dataset:

const el = document.getElementById('vue-search-widget');
const catalogId = el.dataset.catalogId;
createApp(SearchWidget, { catalogId }).mount(el);

Передача CSRF-токена

Битрикс генерирует CSRF-токен для защиты форм. При AJAX-запросах из Vue его нужно передавать:

// Получение токена из cookie (Битрикс сохраняет в bitrix_sessid)
function getBitrixToken() {
    return document.querySelector('input[name="sessid"]')?.value
        || BX.bitrix_sessid?.();
}

// В axios-конфиге:
axios.defaults.headers.common['X-Bitrix-Csrf-Token'] = getBitrixToken();

Конфликт с jQuery и BX.UI

Битрикс использует window.BX — собственный namespace с утилитами, и jQuery. Vue не конфликтует с ними напрямую, но:

  • Не используйте jQuery для манипуляции DOM внутри Vue-компонентов — Vue теряет реактивность
  • BX.UI.Dialog, BX.PopupWindow — можно вызывать из Vue через onMounted/события, но не из шаблона

Случай из практики

Корпоративный сайт на Битрикс: добавили Vue-виджет подбора продукта в шаблон. Виджет работал, но после открытия модального окна Битрикс (BX.PopupWindow) реактивность Vue ломалась — popup клонировал DOM-элемент точки монтирования. Решение: монтирование Vue-виджета в document.body через teleport, а не внутрь элемента, который мог быть клонирован.

Сроки выполнения

Интеграция Vue в существующий шаблон с одним-двумя виджетами — от 4 до 8 часов.