Перейти к содержимому

Язык

Меню документации

Vue SDK

Cookiesh в приложениях на Vue 3 и Nuxt: установка плагина, реактивное согласие через useConsent, компонент ConsentGate и синхронизация согласия пользователей.

Последнее обновление: 29 октября 2026 г.

Vue SDK предоставляет согласие посетителя в виде реактивного состояния, поэтому шаблоны обновляются в тот же момент, когда меняется выбор. SDK поддерживает Vue 3.3 и новее и включает модуль для Nuxt.

Установка

npm install @cookiesh/vue

Сначала загрузите тег script Cookiesh в <head> вашего index.html, как показано в разделе Быстрый старт. Затем зарегистрируйте плагин:

// main.ts
import { createApp } from 'vue';
import { createCookiesh } from '@cookiesh/vue';
import App from './App.vue';

createApp(App)
  .use(createCookiesh({ siteId: 'ck_live_8f2a91' }))
  .mount('#app');

createCookiesh() принимает те же параметры, что и провайдер для React: siteId, language и onChange.

useConsent

<script setup lang="ts">
import { watch } from 'vue';
import { useConsent } from '@cookiesh/vue';

const consent = useConsent();

watch(
  () => consent.analytics,
  (allowed) => analytics.setEnabled(allowed),
  { immediate: true },
);
</script>

<template>
  <button type="button" @click="consent.openPreferences()">Privacy settings</button>
</template>

useConsent() возвращает реактивный объект с теми же полями, что и хук для React: ready, necessary, preferences, analytics, marketing и method, а также методы acceptAll(), rejectAll(), setConsent(), showBanner() и openPreferences(). Не деструктурируйте его, иначе значения потеряют реактивность. Если нужны отдельные ref, используйте toRefs(consent).

ConsentGate

<script setup lang="ts">
import { ConsentGate } from '@cookiesh/vue';
</script>

<template>
  <ConsentGate category="marketing">
    <YouTubeEmbed id="dQw4w9WgXcQ" />
    <template #fallback>
      <VideoPlaceholder />
    </template>
  </ConsentGate>
</template>

Слот по умолчанию отображается, только когда разрешены все перечисленные категории. Чтобы потребовать несколько категорий, передайте в category массив.

Вошедшие пользователи

Вызывайте identify() после входа и reset() после выхода, чтобы выбор следовал за пользователем на всех устройствах:

import { useCookiesh } from '@cookiesh/vue';

const cookiesh = useCookiesh();

await cookiesh.identify(user.id);
// …
cookiesh.reset();

useCookiesh() возвращает полный JavaScript API, включая on() для событий.

Nuxt

Добавьте модуль и ID сайта в nuxt.config.ts. Модуль вставляет тег script в <head> каждой страницы и регистрирует плагин на клиенте:

// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@cookiesh/nuxt'],
  cookiesh: {
    siteId: process.env.NUXT_PUBLIC_COOKIESH_SITE_ID,
  },
});

Во время серверного рендеринга ready равно false, как и все категории, кроме necessary, поэтому контент, зависящий от согласия, отображается только на клиенте. Оберните его в <ClientOnly> или в ConsentGate с запасным вариантом того же размера, чтобы избежать смещения макета.