Faça com que o AngularJS pule a execução de um loop digest se $ http.get () não resultar em novos dados
Atualmente, estou pesquisando o servidor para verificar se há novos dados e, em seguida, atualize o modelo em um aplicativo AngularJS de acordo. Ele é aproximadamente o que estou fazendo:
setInterval(function () {
$http.get('data.json').then(function (result) {
if (result.data.length > 0) {
// if data, update model here
} else {
// nothing has changed, but AngularJS will still start the digest cycle
}
});
}, 5000);
Isso funciona bem, mas a maioria das solicitações não resultará em novos dados ou alterações de dados, mas o serviço $ http realmente não sabe / se importa e ainda acionará um ciclo de resumo. Eu sinto que isso é desnecessário (já que o ciclo de digestão é uma das operações mais pesadas do aplicativo).Ainda existe alguma maneira de usar $ http, mas de alguma forma pular o resumo se nada mudou?
Uma solução seria não usar $ http, mas jQuery e, em seguida, chamar $ apply para informar a Angular que o modelo foi alterado:
setInterval(function () {
$.get('data.json', function (dataList) {
if (dataList.length > 0) {
// if data, update model
$scope.value = dataList[0].value + ' ' + new Date();
// notify angular manually that the model has changed.
$rootScope.$apply();
}
});
}, 5000);
Embora isso pareça funcionar, não tenho certeza de que seja uma boa ideia. Eu ainda gostaria de usar Angular puro, se possível.
Alguém tem alguma sugestão de melhorias para a abordagem acima ou uma solução mais elegante inteiramente?
P.S. O motivo pelo qual estou usando setInterval em vez de $ timeout é porque $ timeout também acionaria um ciclo de resumo que seria desnecessário nesse caso e aumentaria apenas o "problema".