node.js - ngFor com Observables?
Estou convertendo um componente Angular 2 para usar fontes de dados assíncronas.
Eu tinha um <div class="col s4" *ngFor="let line of lines; let i=index;"> que funcionava quando lines era um Array de Objetos, no entanto, agora lines é um Observable de um Array de Objetos.
Isso causa erro:
Não é possível encontrar um differ que suporte o objeto '[object Object]' do tipo 'object'. NgFor só suporta a ligação a Iteráveis, como Arrays.
Eu tentei <div class="col s4" *ngFor="let line of lines | async; let i=index;">, no entanto, isso não pareceu fazer diferença.
Como devo lidar com isso?
Resposta #1
Aqui está um exemplo de vinculação a um array observável. Seria útil se você também postasse o código do seu controlador/componente.
@Component({
selector: 'my-app',
template: `
<div>
<h2>Wikipedia Search</h2>
<input type="text" [formControl]="term"/>
<ul>
<li *ngFor="let item of items | async">{{item}}</li>
</ul>
</div>
`
})
export class App {
items: Observable<Array<string>>;
term = new FormControl();
constructor(private wikipediaService: WikipediaService) {
this.items = this.term.valueChanges
.debounceTime(400)
.distinctUntilChanged()
.switchMap(term => this.wikipediaService.search(term));
}
}
http://blog.thoughtram.io/angular/2016/01/07/taking-advantage-of-observables-in-angular2-pt2.html
Usando um array de um Observable Object com ngFor e Async Pipe no Angular 2
A resposta para a pergunta acima é esta:
// in the service
getItems(){
return Observable.interval(2200).map(i=> [{name: 'obj 1'},{name: 'obj 2'}])
}
// in the controller
Items: Observable<Array<any>>
ngOnInit() {
this.items = this._itemService.getItems();
}
// in template
<div *ngFor='let item of items | async'>
{{item.name}}
</div>
