Processo de detecção de alterações angulares repintar o dom
Estou aprendendo sobre o processo de detecção de alterações angulares e, verificando as ferramentas de desenvolvimento no meu Chrome, vejo um comportamento estranho.
Meu plnkr para demonstrar o comportamento:http://plnkr.co/edit/cTLF00nQdhVmkHYc8IOu
Eu tenho um componente simples com a exibição:
<li *ngFor="let item of list">{{item.name}}</li>
e construtor:
constructor() {
this.list = [{name: 'Gustavo'}, {name: 'Costa'}]
para simular uma solicitação simples, adicionei:
// simulating request repaint the DOM
setInterval( () => {
this.list = [{name: 'Gustavo'}, {name: 'Costa'}];
}, 2000);
Se você notou, a matrizlist
recebe uma lista igual ao valor inicial. Vamos imaginar que quando o Angular verifica os valores exibidos no processo de detecção de alterações, temos um código como este:
if( oldName !== name ) { // ( 'Gustavo' !== 'Gustavo')
// update the view
}
Mas os valores são os mesmos,por que angular REPINTAR O DOM a cada 2 segundos.?
Mas seMudo o objeto, o REPAINT não ocorre
// simulating request there is not repaint
setInterval( () => {
this.list[0].name = "Gustavo"; // no repaint because it's the same value
this.list[1].name = "Costa 2"; // repaint
}, 2000);
Você pode testar isso com o link plnkr acima.