2017-01-03 14 views
2

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

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

Должен ли я использовать 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 - Loading Controller doesn't work). Уловка после увольнения достаточно ..? Что делать, если после загрузки я хочу нажать на другую страницу ...?

Благодарим за терпение.

ответ

4

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

Правильный способ представить загрузчик с помощью 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); }); 
+0

Большое спасибо за ваше время ! остался только вопрос - если я увольняю его после «первой волны», не может ли это вызвать ошибку, чтобы «снова» после второй волны? – idosh

+0

другой маленький выпуск - как насчет loading.dismiss() vs loading.onDismiss() ...? У меня просто было много вопросов по этой теме, я хочу убедиться, что я делаю это правильно (раз и навсегда), спасибо! – idosh

+1

Ничего не случится, если вы попробуете уволить загрузчика несколько раз, так как он обрабатывается Ionic (пожалуйста, проверьте [этот демонстрационный плунжер] (http://plnkr.co/edit/BGyNrSvJYoFxX3J7rCbi?p=preview)). Что касается метода 'load.onDismiss()', я не часто его использую с loadCtrl, но я много использовал его с ModalCtrl для отправки информации вызывающему. Я предполагаю, что наилучшим подходом было бы использовать метод «увольнять», когда вы хотите скрыть предупреждение загрузки, а также использовать 'loading.onDismiss() ...' для обработки таких вещей, как физическая кнопка Android и некоторые другие странные сценарии. – sebaferreras

Смежные вопросы