Добро пожаловать в StackOverflow, @ wingej0.
Существует специальный JavaScript API для вызова виджетов Calendly из одностраничных приложений в Angular, React и т. Д. С помощью этого API вы можете точно контролировать, когда вы хотитеИнициализируемый виджет вместо инициализации при загрузке страницы.
Общие инструкции
Сначала добавьте атрибут data-auto-load="false"
в .calendly-inline-widget
и удалите атрибут data-url
.Поэтому элемент должен выглядеть следующим образом:
<div class="calendly-inline-widget" style="min-width:320px;height:580px;" data-auto-load="false">
Затем выполните этот код после того, как вы хотите инициализировать виджет Calendly:
Calendly.initInlineWidget({
url: 'https://calendly.com/test-cei',
parentElement: document.querySelector('.calendly-inline-widget'),
});
Дополнительная документация здесь: Calendly Advancedпараметры встраивания
Оборачивание в угловой компонент
Как указано выше, для динамического создания виджета для вставки в календарь нам нужны две вещи:
- Создайте элемент контейнера, в который iframe Calendly будет отображаться с помощью Calendly Embed API
- Вызовите API Calendly Embed
Эти две вещи прекрасно сочетаются в компоненте:
import {
Component,
NgModule,
VERSION,
ElementRef,
ViewChild
} from '@angular/core'
@Component({
selector: 'app-calendly-widget',
template: `
<div #container class="calendly-inline-widget" style="min-width:320px;height:580px;" data-auto-load="false"></div>
`
})
export class CalendlyWidgetComponent {
@ViewChild('container') container: ElementRef;
ngOnInit() {
Calendly.initInlineWidget({
url: 'https://calendly.com/test-cei',
parentElement: this.container.nativeElement
});
}
Приведенный выше код (TypeScript) определяет компонент, который визуализирует контейнер и сразу же вызывает Calendly Embed API после инициализации.Мы используем Angular @ViewChild
для доступа к необработанному элементу DOM, который визуализирует компонент.
Вот рабочая демонстрация: https://plnkr.co/edit/mpl6l8ifxc1amS611DMD?p=preview (обратите внимание, что она использует более старую версию Angularчем вы используете, дайте мне знать, если у вас есть проблемы с совместимостью)