2017-01-03 1 views
2

Мне было интересно узнать, как лучше всего использовать чистые наблюдаемые, а также подписываться на наблюдаемые и использовать массив.Использование pure Observable vs array (от подписки)

вариант 1 - "чистый наблюдаемым"

this.schools = this.angularFire.database.list('schools') 

, а затем в использовании HTML асинхронном трубы (и rxjs операторов для обработки данных)

вариант 2 - "подписываться на массив"

this.angularFire.database.list('schools').subscribe (response => this.schools=response) 

, а затем рассматривать его как обычный массив.

+1

По возможности попробуйте использовать '| async' в угловом2 и предотвратить ручные подписки! – olsn

ответ

3

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

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

В принципе, вам нужно будет написать что-то вроде этого внутри компонента:

ngOnInit(){ 
this.subscription = this.angularFire.database.list('schools').subscribe(response => this.schools=response) 
} 

//then somewhere in your code 
ngOnDestroy(){ 
    this.subscription.unsubscribe(); 
} 

Для того, чтобы избежать необходимости отказаться от подписки вручную, и если это данные, которые нужны только для чтения один раз, вы можете использовать один доступных вам операторов, например take().

this.angularFire.database.list('schools').take(1).subscribe(response => this.schools=response) 

Этот подход гарантирует, что наблюдаемый автоматически отпирается автоматически после запроса в первый раз.

+0

эй, я получил противоречивый ответ на форуме ionic2 .. как вы думаете, это вопрос рамок работы? Я не уверен, что реализовать в своем приложении. Https://forum.ionicframework.com/t/using-pure-observable-vs-array-from-subscribe/74997/4 – idosh

+1

Ну, единственная проблема, когда вы не используете async pipe - это то, что вам нужно вручную поддерживать все состояния всех ваших наблюдаемых. Imo, используя асинхронную трубу, делает все более практичным и чистым, особенно когда вам не нужно фильтровать или модифицировать что-либо, когда вы получаете данные. Если вам нужно что-то отфильтровать, второй вариант кажется более адекватным. Просто используйте тот, который имеет больше смысла для вас. –