Возобновление функции после увольнения модального - PullRequest
0 голосов
/ 10 октября 2019

Я не уверен, возможно ли это сделать, поэтому постараюсь объяснить это как можно лучше. Я прыгаю на Ionic 4 только после того, как у меня появился опыт работы с Ionic 1, и у меня много проблем с ростом. В моих приложениях Ionic 1 у меня было много функций, которые включали ионные всплывающие окна, и всплывающее окно было бы неотъемлемой частью завершения функции.

А именно, я использую код, подобный этому ответу: https://stackoverflow.com/a/55041136/5306408

По сути, мой общий код работает так:

  • У меня есть кликабельный элемент на странице.
  • Нажатие на эту страницу запускает сервисную функцию.
  • Сервисная функция вызывает URL-адрес и в идеальных условиях возвращает данные, полученные с этого URL-адреса, на страницу.
  • Однако при некоторых условиях пользователь должен будет предоставить дополнительную информацию. В идеале мне бы хотелось, чтобы это происходило в модальном режиме: как только пользователь заполняет правильную информацию, модальное окно закрывается, а затем функция продолжает выполнять свою первоначальную цель: вызвать URL-адрес и вернуть полученные из него данные,и возвращая его на страницу в шаге 1, как и предполагалось.

В основном:

Страница:

... 

pageFunction() void {
    this.someService.someFunction('someURL').then(dataFromTheURL) => {
        //do something with dataFromTheURL
    })
}

...

someService:

...

async openModal(params) {
    const modal = await this.modalController.create({
        component: someLoginModalPage,
        componentProps: { ... }
    });

    modal.onDidDismiss().then((dataReturned) => {
        //need a way to pass dataReturned back to pageFunction()
    });

    return await modal.present();
}

someFunction(url): Promise<any> {
    return new Promise<any>((resolve) {
        if (condition is fine and no modal is needed) {
            this.http.get(url, {headers: someHeaderObject}).subscribe(result => {
                resolve(result)
            })
        }
        else {
            //here is the crux of the problem - I need indicatorThatModalHasBeenClosed to come from the modal being closed, not opened
            this.openModal(someParams).then((indicatorThatModalHasBeenClosed) => {

                //do something with indicatorThatModalHasBeenClosed

                this.http.get(url, {headers: someHeaderObject}).subscribe(result => {
                    resolve(result)
                })
            });
        }
    })
}

Можно ли это сделать с угловыми модалами? Мне трудно найти какие-либо примеры, потому что код openModal возвращает результат modal.present(), а не данные, которые передаются через modal.onDidDismiss(). В конечном итоге мне нужна функция (возвращающая Обещание), которая открывает модальное окно для разрешения с данными, полученными при закрытии этого же модального режима.

1 Ответ

0 голосов
/ 16 октября 2019

Ну, я подумал об обходном пути: если модал открывается, отклоните someFunction вместо его разрешения.

Затем добавьте свойства dataReturned и loginModalActive к службе, которой принадлежит someFunction.

Добавьте this.loginModalActive = true; к openModal и

this.dataReturned = dataReturned;
this.loginModalActive = false;

к содержащемуся в вызове содержавшемуся вызову modal.onDidDismiss().

Затем добавьте эту функцию к службе, которой принадлежит someFunction:

waitForLoginModuleToClose() {
  return new Promise(resolve => {
    const delay = 100;

    interval(delay).subscribe(() => {
      if (!this.loginModalActive) {
        resolve(this.dataReturned);
      }
    });
  });
}

На странице есть pageFunction()Вызовите себя, если вызов someService отклонен.

Это не совсем то, что я искал, но это позволяет сервису отслеживать, должен ли модаль быть открытым, и запускаетинтервал каждые 100 мс, чтобы проверить, открыт он или нет. Как только он определил, что он не открыт, можно попытаться снова выполнить функцию попытки загрузки страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...