2016-04-05 5 views
2

У меня возникла проблема с асинхронной трубой в Angular2, когда я использую ее внутри *ngFor.Angular2 async труба не работает в ngfor

Вот некоторые код:

Это шаблон

<li *ngFor="#obj of _filtersPageState | async"> 
     hello world 
</li> 

Переменная _filtersPageState объявлена ​​как:

private _filtersPageState: Observable<any> = new Observable<any>(); 

и инициализируется с помощью функции select от @ngrx/store:

this._filtersPageState = store.select('FiltersPageState'); 
this._filtersPageState.subscribe(v => console.log(v)); 

FiltersPageState объекта внутри магазина заполняется через запрос HTTP, и если я распечатать @ngrx/store объект в журнале консоли, я могу видеть, что запрос прибудет выполняется правильно.

Моя проблема заключается в том, что когда труба async находится внутри ngFor, компонент не загружается, и я не получаю ошибок на консоли Chrome.

Если я напишу {{_filtersPageState.value | async}} в шаблоне html, значение Observable будет отображаться правильно.

Я играю с бета 13

Любой ключ или предложение? Спасибо!

Редактировать

Я заметил, что если я пишу {{_filtersPageState| async}} внутри шаблона и в то же время я пишу ngFor (даже лань это один цикл на простом массиве без async трубы, мой компонент ломается (тихо)

Edit 2

Я хочу добавить еще одну плитку к головоломке.

Следующий шаблон ломает компонент:

{{_filtersPageState | async}} 
<li *ngFor="#obj of simpleArray"> 
     {{obj}} 
</li> 

Это как если async и ngFor не хотят быть вместе :(

Редактировать 3

я узнал, что ни труба не работающих внутри ngFor:

<h1 *ngFor="#element of filtersPageState|async">{{element}}</h1> 
<h1 *ngFor="#element of simpleArray|uppercase">{{element}}</h1> 
<h1 *ngFor="#element of simpleArray">{{element|uppercase}}</h1> 
<h1 *ngFor="#element of simpleArray|aaaaaaaaa">{{element}}</h1> 

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

+0

Какой тип 'store.select ('FiltersPageState')' return? 'ngFor' ожидает итерации, поэтому он может просто не быть одним. Я сделал что-то очень похожее в своем сообщении в блоге об этом здесь: http://lukajcb.github.io/blog/angular2/2016/04/02/frp-in-angular-2.html –

+0

'store.select () 'возвращает наблюдаемое с массивом внутри. Я буду смотреть на ваш пост, спасибо. В любом случае я отредактировал вопрос, добавив более подробную информацию –

+0

Можете ли вы создать Plunker, который демонстрирует проблему? –

ответ

1

Я решил проблему.

Я включил в сокращенную версию Angular 2, как только я включил angular2.dev.js, все начало работать.

Thanks