Когда отключать контроллер ионной нагрузки в ожидании наблюдаемого

Мне интересно, как правильно использовать контроллер загрузки ionic-2, ожидая прибытия async observable - поскольку observable может не поступать ни в одном, ни в одной, ни в нескольких «волнах» ответов.

первый вопрос - как подать

Должен ли я использовать loader.present() или loader.present().then(... я видел много примеров кода, которые "игнорируют" асинхронный характер загрузчика (я даже видел loader.present(//function to execute)

второй вопрос - когда увольнять

Как уже упоминалось, ответ от подписки может приходить в виде неизвестных «волн» ответов - с учетом этого, когда мне следует закрыть загрузчик? что делать, если не приходит ответ? что если будет пара отзывов? Например:

let loader = this.loadingController.create({content : "something"})
loader.present().then(()=>{
    source.subscribe((school)=>{
        this.schools.push(school)
        loader.dismiss()
        }, err=> loader.dismiss()
    )
 })

третий вопрос - как уволить

Я заметил, что есть много проблем с отключением контроллера загрузки (например, Ionic 2 - Контроллер загрузки не работает). Достаточно ли улова после увольнения ..? Что делать, если после загрузки я хочу перейти на другую страницу ...?

Спасибо за терпеливость.


person idosh    schedule 03.01.2017    source источник


Ответы (1)


первый вопрос - как преподнести?

Правильный способ представить загрузчик - использовать then, потому что в противном случае вы можете столкнуться с некоторыми проблемами, связанными с ошибочной анимацией, а также, возможно, с некоторыми другими странными проблемами. В конце концов, если метод возвращает обещание, правильным способом его использования всегда будет делать что-то еще, когда обещание выполнено.

loader.present().then(() => { /* ... */ });

Я тоже делаю то же самое, когда мне нужно отключить загрузку:

loading.dismiss().then(() => { /* ... */ });

второй вопрос - когда увольнять?

Идея использования загрузки состоит в том, чтобы дать пользователю знать, что что-то происходит в фоновом режиме, поэтому я думаю, вам следует отказаться от загрузки после первой волны.

Если ответа не поступает (например, результаты пусты), вы можете включить условие *ngIf="result.items.length === 0", чтобы отобразить div с сообщением о том, что результаты пусты. Если новая волна прибывает с некоторыми элементами в результате, этот div будет автоматически скрыт.

третий вопрос - как уволить?

Как и метод present, dismiss также возвращает обещание. В этом случае легче увидеть некоторую ошибку в анимации, если вы не используете then. Итак, снова, просто дождавшись завершения метода отклонения (используя then), вы можете нажать новую страницу или сделать то, что вам нужно сделать, и она должна работать правильно:

loading.dismiss().then(() => { this.navCtrl.push(NewPage); });
person sebaferreras    schedule 04.01.2017
comment
Большое вам спасибо за ваше время! у меня остается только один вопрос: если я отклоняю его после первой волны, не приведет ли это к ошибке, если я отклоню его снова после второй волны? - person idosh; 04.01.2017
comment
еще одна небольшая проблема - как насчет loading.dismiss () и loading.onDismiss () ...? У меня было так много разговоров по этой проблеме, я хочу убедиться, что делаю все правильно (раз и навсегда), спасибо! - person idosh; 04.01.2017
comment
Ничего не произойдет, если вы попытаетесь закрыть загрузчик несколько раз, поскольку он обрабатывается внутри Ionic (пожалуйста, отметьте этот демо-плункер). Что касается метода loading.onDismiss(), я не часто использую его с loadingCtrl, но я часто использовал его с ModalCtrl для отправки информации вызывающему. Я думаю, что лучшим подходом было бы использовать метод dismiss, когда вы хотите скрыть предупреждение о загрузке, а также использовать loading.onDismiss()... для обработки таких вещей, как физическая кнопка Android и некоторые другие странные сценарии. - person sebaferreras; 04.01.2017
comment
Также обратите внимание, что loading.dismiss() прекратит загрузку, а loading.onDismiss()... будет выполняться, когда предупреждение будет закрыто, но само по себе оно не будет закрыто. - person sebaferreras; 04.01.2017