um_pouco_sobre_change_detection - VWJavascript/Alurapic GitHub Wiki

Um pouco sobre change detection

Angular só monitora a referência de this.fotos do nosso componente. Se alguém incluir ou remover um novo item da lista ele não saberá. Para isso, precisamos criar uma nova lista e atribuir essa lista em this.fotos. Como estamos reatribuindo um valor para a variável o Angular desencadeará seu mecanismo de deteção de mudança e renderizará a view. Nosso código fica assim:

import { Component } from '@angular/core';
import { FotoService } from '../foto/foto.service';
import { FotoComponent } from '../foto/foto.component';

@Component({
    moduleId: module.id,
    selector: 'listagem',
    templateUrl: './listagem.component.html'
})
export class ListagemComponent {

    fotos: FotoComponent[] = [];
    service: FotoService;

    constructor(service: FotoService) {

        this.service = service;
        this.service
            .lista()
            .subscribe(fotos => {
                this.fotos = fotos;
            }, erro => console.log(erro));

    }

    remove(foto) {

        this.service
            .remove(foto)
            .subscribe(
                () => {

                    console.log('Foto removida com sucesso');
                    let novasFotos = this.fotos.slice(0);
                    let indice = novasFotos.indexOf(foto);
                    novasFotos.splice(indice, 1);
                    this.fotos = novasFotos;
                }, 
                erro => console.log(erro)
            );

    }
 }