Ionic 4 загружает компонент изменения с v3 - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь реорганизовать эту функцию для ionic 4. Проблема в том, что половина этого импорта больше не существует. Кто-нибудь понял, где OverlayBaseController, загрузка теперь в v4?

import {ToastController, LoadingController, OverlayBaseController, Loading } from "ionic-angular"

/**
 * Wraps an asynchronous call with the LoadingController overlay
 * @param action the action to execute
 * @param loadingMessage the loading message to display
 * @returns {Promise<T>}
 */
async loading<T>(action: Promise<T>, loadingMessage?: string): Promise<T> {
    // Delay showing the loading spinner for 0.4s
    // See http://yuiblog.com/blog/2010/11/11/improving-perceived-site-performance-with-spinners/
    // Hopefully delay is re-implemented. See https://github.com/ionic-team/ionic/pull/11583
    let loadingOptions: OverlayBaseController = {} // delay: 400
    if (loadingMessage)
        loadingOptions.content = loadingMessage
    let loader: Loading = await this.loadingCtrl.create(loadingOptions)
        await loader.present().catch(this.log.warn)
    try {
        let result: T = await action
        loader.dismiss()
        return result
    } catch (e) {
        loader.dismiss()
        throw e
    }
}

1 Ответ

1 голос
/ 29 апреля 2019

А как насчет следующего?Я использовал docs для справки, похоже, нет необходимости использовать OverlayBaseController или Loading.

import { LoadingController } from '@ionic/angular';

async loading<T>(action: Promise<T>, loadingMessage?: string): Promise<T> {
    const loader = await this.loadingCtrl.create({
      message: loadingMessage
    });
    await loader.present().catch(this.log.warn);
    try {
      const result: T = await action;
      loader.dismiss();
      return result;
    } catch (e) {
      loader.dismiss();
      throw e;
    }
  }

Я удалил комментарий о задержке.Комментарий кажется устаревшим и запутанным, поскольку нет возможности отложить загрузку экрана ...

Я также перешел с let на const, когда это возможно, но это не должно повредить функциональности.

Также было бы неплохо обработать случай, если loadingMessage не определено.Может быть, вы могли бы показать общее сообщение типа Пожалуйста, подождите ... Это можно сделать с помощью параметра по умолчанию.Поэтому вам придется изменить подпись следующим образом:

async loading<T>(action: Promise<T>, loadingMessage = 'Please wait ...'): Promise<T>

Для получения дополнительной информации о параметрах по умолчанию вы также можете проверить документы Typescript .

...