現在、サーバーをポーリングして新しいデータを確認し、それに応じて AngularJS アプリでモデルを更新しています。彼は大まかに私がやっていることです:
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);
これは問題なく動作しますが、ほとんどのリクエストは新しいデータやデータの変更にはなりませんが、$http サービスは実際には認識もケアもせず、ダイジェスト サイクルをトリガーします。これは不要だと思います (ダイジェスト サイクルはアプリで最も重い操作の 1 つであるため)。$http を引き続き使用できる方法はありますが、何も変更されていない場合、何らかの方法でダイジェストをスキップできますか?
解決策の 1 つは、$http ではなく jQuery を代わりに使用し、$apply を呼び出してモデルが変更されたことを Angular に知らせることです。
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);
これは機能しているように見えますが、良いアイデアかどうかはわかりません。可能であれば、純粋な Angular を引き続き使用したいと思います。
上記のアプローチを改善するための提案や、より洗練されたソリューションを完全に提案した人はいますか?
PS $timeout の代わりに setInterval を使用している理由は、$timeout がこの場合不要なダイジェスト サイクルをトリガーし、「問題」に追加されるだけだからです。