تخطَّ إلى المحتوى

Nuxt 3

يقوم Nuxt 3 بعرض الصفحات على الخادم بشكل افتراضي. يجب تحميل سكربتات CDN والعناصر المخصصة على جانب العميل فقط. إضافة عميل Nuxt هي أنظف مكان للقيام بذلك.

Terminal window
npm install @wink/elements

اللاحقة .client.ts تخبر Nuxt بتشغيل هذه الإضافة فقط في المتصفح:

plugins/wink.client.ts
import { load } from '@wink/elements';
export default defineNuxtPlugin(() => {
load({ clientId: useRuntimeConfig().public.winkClientId });
});

تكوين متغير وقت التشغيل

Section titled “تكوين متغير وقت التشغيل”
nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
public: {
winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID,
},
},
});

أضف إلى .env:

NUXT_PUBLIC_WINK_CLIENT_ID=your-client-id

تكوين Vue للعناصر المخصصة

Section titled “تكوين Vue للعناصر المخصصة”

أضف خيار المترجم isCustomElement حتى لا يحذر Vue من علامات <wink-*> غير المعروفة:

nuxt.config.ts
export default defineNuxtConfig({
vue: {
compilerOptions: {
isCustomElement: (tag) => tag.startsWith('wink-'),
},
},
runtimeConfig: {
public: {
winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID,
},
},
});

غلف مكونات Wink بـ <ClientOnly> لمنع عدم تطابق التهيئة في SSR:

<template>
<main>
<ClientOnly>
<wink-content-loader layout="HOTEL" :id="layoutId" />
</ClientOnly>
</main>
</template>
<script setup lang="ts">
const layoutId = 'YOUR_LAYOUT_ID';
</script>

قم بتمديد HTMLElementTagNameMap العالمية (نفس Vue 3) للحصول على إكمال تلقائي للسمات. راجع صفحة تكامل Vue 3 لملف التصريح الكامل.