mais_templates - VWJavascript/Alurapic GitHub Wiki
// alurapic/client/app/listagem/listagem.component.ts
import { Component } from '@angular/core';
import { Http } from '@angular/http';
import { FotoComponent } from '../foto/foto.component';
import { FotoService } from '../foto/foto.service';
import { PainelComponent } from '../painel/painel.component';
@Component({
    moduleId: module.id,
    selector: 'listagem',
    templateUrl: './listagem.component.html' 
})
export class ListagemComponent { 
    fotos: FotoComponent[] = [];
    service: FotoService;
    mensagem: string = '';
    constructor(service: FotoService) {
        this.service = service;
        this.service.lista()
            .subscribe(
                fotos => this.fotos = fotos,
                erro => console.log(erro)
            );
    }
    remove(foto: FotoComponent, painel: PainelComponent) {
        this.service
            .remove(foto)
            .subscribe(
                () => {
                    painel.fadeOut(() => {
                        let novasFotos = this.fotos.slice(0);
                        let indice = novasFotos.indexOf(foto);
                        novasFotos.splice(indice, 1);
                        this.fotos = novasFotos;
                        this.mensagem = 'Foto removida com sucesso';
                    }); 
                }, 
                erro => {
                    console.log(erro);
                    this.mensagem = 'Não foi possível remover a foto';
                }
            );
    }
}Por fim, só precisamos alterar o template de ListagemComponent para que passe, além da foto, o painel. Vamos lançar mão mais uma vez de variável local, de template. Criaremos uma para termos uma referência para o painel:
<!-- alurapic/client/app/listagem/listagem.component.html -->
<!-- código anterior omitido -->
<div class="row">
    <painel #painel *ngFor="let foto of fotos | filtroPorTitulo: textoProcurado.value" titulo="{{foto.titulo | uppercase}}"  class="col-md-2">
        <a [routerLink]="['/cadastro', foto._id]">
            <foto titulo="{{foto.titulo}}" url="{{foto.url}}"></foto>
        </a>
        <br>
        <botao confirmacao="true" nome="Remover" estilo="btn-danger btn-block" (acao)="remove(foto, painel)"></botao>
    </painel>
</div><!-- fim row -->Agora, quando removemos um foto, seu painel inteiro vai ficando translúcido até desaparecer.