Angular2 - A detecção de alterações não é exibida, a menos que clicada
Eu tenho um componente no qual você pode inserir alguns termos de pesquisa e ele filtrará o conteúdo usando um loop * ngFor. O problema é que, quando insiro um termo de pesquisa, preciso clicar na tela para que a atualização entre em vigor visualmente.
Aqui está a parte do código html em que o loop ocorre:
<li *ngFor="let item of posts | reverse; let i = index; ">
<div class="media" *ngIf="item.doesContainTags(searchTags)">
O código que é executado no campo de entrada em que você insere as tags a serem pesquisadas é:
updateSearchTags() {
event.stopPropagation();
// sorter is what is types into the search by tag input field
this.searchTags = this.sorter.split(',');
}
Aqui está a função estática no objeto de postagem:
doesContainTags(searchTags: strin,g[]): boolean {
let array = this.tags.split(',');
if(!array || array.length === 0) {return false;}
if(!searchTags || searchTags.length === 0) {return false;}
for(let searchTag of searchTags){
if(array.indexOf(searchTag) === -1) {
} else {
return true;
}
}
return false;
}
Aqui está o código que obtém as postagens em loop:
this.postsService.subscribeAllPosts()
.do(console.log)
.subscribe( posts => this.posts = posts);
Aqui está o código no postsService que obtém o observável:
subscribeAllPosts(): Observable<Post[]> {
return this.af.database.list('posts')
.map(Post.fromJsonList);
}
Então, tudo isso funciona, mas a alteração não é exibida, a menos que eu clique na tela. Existe uma maneira de chamá-lo manualmente para atualizar. Eu estava pensando que poderia chamar isso manualmente na função updateSearchTags, que é atualizada após digitar a pesquisa por entrada de tags, mas não tenho certeza de qual código faria isso.
Atualização, mudei o evento para um evento de pressionamento de tecla. Agora, no entanto, estou tentando fazer com que esse evento ocorra após a ligação bidirecional, pois agora ela está apenas fazendo isso antes que a ligação ocorra. Apenas mostra cada caractere depois que você clica no próximo.Atualização 2 - Encontrou o evento keyup. Emitido classificado.