Angular 8: полосатые элементы, вложенные внутрь Nebular Components

Проблема: я столкнулся с проблемой, когда я не могу токенизировать информацию о кредитной карте, размещенную внутри элемента полосы карты, который я подключаю к своему компоненту.

В настоящее время я использую компонент Nebular stepper (https://akveo.github.io/nebular/docs/components/stepper/overview#nbsteppercomponent) и иметь вложенный дочерний компонент со следующим кодом ts:

public async fetchCardInput(): Promise<any> {
    let address: Address = this.ccAddress.fetchAddressData();
    let name = this.getCardholderName();
    let line2 = address.getAddressLine2();

    let cardTokenPayload = {
        name: name,
        address_line1: address.getAddressLine1(),
        address_city: address.getCity(),
        address_state: address.getState(),
        address_zip: address.getZipCode(),
        country: this.constants.US,
        currency: this.constants.USD
    };

    if (line2) {
        cardTokenPayload['address_line2'] = line2;
    }

    const { token, error } = await this.stripe.createToken(this.card, cardTokenPayload);

    if (error) {
        console.log('Something went wrong: ', error);
        return null;
    } else {
        console.log('SUCCESS! Token: ', token);

        let data = {
            tokenId: token.id,
            address: address,
            cardholderName: name
        }

        return data;
    }
}

html (вытащил html и ts из дочернего компонента, но все равно ведет себя так же):

<nb-step label="Payment / Payout">
  <div class="heading">{{ constants.PAYMENT_INFORMATION }}</div>
  <label class="input-label">{{ constants.CREDIT_CARD_INFORMATION }}</label>
  <div class="card-container">
      <div id="card-element" #cardElement></div>
  </div>
  <div *ngIf="error" class="error mt-10">{{ error }}</div>
</nb-step>

Дело в том, что эта реализация прекрасно работает, когда она не вложена внутрь компонента Nebular. Кто-нибудь нашел обходной путь для этой проблемы или, по крайней мере, знаком с компонентами Nebular и тем, что они делают под капотом?

РЕДАКТИРОВАТЬ: добавление исключения браузера:

ERROR Error: Uncaught (in promise): IntegrationError: We could not retrieve data from the specified Element.
          Please make sure the Element you are attempting to use is still mounted.

Я использую Angular 8 и Nebular 4.5.0.

Заранее спасибо!


person Scott    schedule 26.04.2020    source источник
comment
Что именно идет не так? Вы получаете сообщение об ошибке?   -  person Paul Asjes    schedule 27.04.2020
comment
Да, я получаю исключение в браузере. Я обновил свой пост с ошибкой.   -  person Scott    schedule 27.04.2020
comment
Вы уверены, что добавили скрипт полосы в свой файл?   -  person rijin    schedule 27.04.2020
comment
Хм, а степпер Nebular удаляет элементы из DOM, когда шаг не виден? Похоже, что элемент Stripe отсутствует в DOM, что приводит к сбою stripe.js при попытке его использования.   -  person Paul Asjes    schedule 28.04.2020
comment
@rijin Да, вызовы API полосы работают нормально, когда форма перемещается за пределы компонента Nebular Stepper. Проблема возникает, когда форма вложена в дочерний компонент ‹nb-step›.   -  person Scott    schedule 03.05.2020
comment
@PaulAsjes, я так думаю. Я обратился в их поддержку, но пока не получил ответа. Я предполагаю, что элементы DOM скрыты в тени DOM компонента ‹nb-step›. Странно то, что когда я распечатываю html-элемент из моего машинописного файла, он знает, что этот элемент существует, прежде чем сделать вызов для токенизации данных кредитной карты.   -  person Scott    schedule 03.05.2020
comment
У меня возникла аналогичная проблема, когда я интегрировал страйп-карту в компонент Vue. Мое решение для Vue состояло в том, чтобы переместить инициализацию компонента карты из созданного в смонтированный хук жизненного цикла. Я не вижу, где вы выполняете свою инициализацию, но убедитесь, что это происходит после того, как компонент полностью отрендерен, а элемент div#card-element виден и не будет манипулироваться до тех пор, пока не будет получен токен карты.   -  person Yura Fedoriv    schedule 02.10.2020