Fitting Widget Docs

Nuxt

Integrate with a Nuxt 3 / Nuxt 4 app

Nuxt Integration

The Fitting Widget integrates seamlessly with Nuxt 3 and Nuxt 4.

1. Load the Script

Use the useHead composable, or add scripts to your nuxt.config.ts.

Option A — Per Page with useHead

<!-- pages/product/[slug].vue -->
<template>
  <div>
    <h1>{{ product.name }}</h1>
    <TryOnWidget :product-name="product.name" :image-url="product.image" />
  </div>
</template>

<script setup lang="ts">
import { useHead } from '#app'

useHead({
  script: [
    {
      src: 'https://widget.try-on.ru/fitting-widget-bundle.js',
      id: 'fitting-widget-bundle',
    },
    {
      id: 'fitting-init',
      innerHTML: `
        window.fitting = window.fitting || function() {
          (window.fitting.q = window.fitting.q || []).push(arguments);
        };
        window.fitting('init', {
          apiKey: '${import.meta.env.VITE_TRY_ON_API_KEY}'
        });
      `,
    },
  ],
})
</script>

Option B — Global in nuxt.config.ts

export default defineNuxtConfig({
  app: {
    head: {
      script: [
        {
          src: 'https://widget.try-on.ru/fitting-widget-bundle.js',
          id: 'fitting-widget-bundle',
        },
        {
          id: 'fitting-init',
          innerHTML: `
            window.fitting = window.fitting || function() {
              (window.fitting.q = window.fitting.q || []).push(arguments);
            };
            window.fitting('init', {
              apiKey: '${import.meta.env.VITE_TRY_ON_API_KEY}'
            });
          `,
        },
      ],
    },
  },
})

2. Create the Wrapper Component

<!-- components/TryOnWidget.vue -->
<template>
  <div>
    <div id="widget-container" class="aspect-[3/4] w-full max-w-[600px]" />
    <button @click="handleTryOn">Try On</button>
  </div>
</template>

<script setup lang="ts">
const props = defineProps<{
  productName: string
  imageUrl: string
}>()

const handleTryOn = () => {
  window.fitting('create', {
    targetElementId: 'widget-container',
    model: 'balanced',
    tryonItems: [
      {
        productName: props.productName,
        url: props.imageUrl,
      },
    ],
  })
}
</script>

Environment Variable

Add to .env:

VITE_TRY_ON_API_KEY=pk_live_xxx