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

Angular

مكونات Wink هي في الأصل Angular Elements — تندمج بشكل طبيعي في تطبيقات Angular. الإعداد الوحيد المطلوب هو إخبار مترجم Angular بالسماح بأسماء العناصر غير المعروفة.

Terminal window
npm install @wink/elements

التهيئة — تحميل CDN مرة واحدة

Section titled “التهيئة — تحميل CDN مرة واحدة”

استدعِ load() قبل bootstrapApplication (أو داخل APP_INITIALIZER):

src/main.ts
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './portal/app.component';
import { load } from '@wink/elements';
load({ clientId: import.meta.env['NG_APP_WINK_CLIENT_ID'] });
bootstrapApplication(AppComponent).catch(console.error);

السماح بأسماء العناصر المخصصة

Section titled “السماح بأسماء العناصر المخصصة”

أضف CUSTOM_ELEMENTS_SCHEMA إلى كل مكون مستقل (أو وحدة) يعرض علامات <wink-*>:

src/portal/hotels/hotels.component.ts
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@Component({
selector: 'app-hotels',
standalone: true,
schemas: [CUSTOM_ELEMENTS_SCHEMA],
template: `
<wink-content-loader layout="HOTEL" [id]="layoutId" />
<wink-lookup />
`,
})
export class HotelsComponent {
layoutId = 'YOUR_LAYOUT_ID';
}

تعمل صياغة القوالب في Angular مباشرة مع سمات السلسلة في العناصر المخصصة:

<!-- ثابت -->
<wink-content-loader layout="HOTEL" id="abc123" />
<!-- ربط ديناميكي -->
<wink-content-loader [attr.layout]="layout" [attr.id]="layoutId" />

استخدم ربط [attr.name] عندما تكون القيمة ديناميكية — ربط [property] العادي في Angular يستهدف خصائص DOM، وليس سمات HTML التي تعتمد عليها العناصر المخصصة.

لمشاريع @angular/cli 16+، استخدم environment.ts أو بادئة NG_APP_* مع @ngx-env/builder:

src/environments/environment.ts
export const environment = {
winkClientId: 'YOUR_CLIENT_ID',
};
src/main.ts
import { environment } from './environments/environment';
load({ clientId: environment.winkClientId });

تصدّر حزمة @wink/elements واجهات مكتوبة لجميع سمات المكونات:

import type { WinkContentLoaderAttributes, WinkLayout } from '@wink/elements';
const attrs: WinkContentLoaderAttributes = {
layout: 'HOTEL' as WinkLayout,
id: 'abc123',
};