私のangularJSモデルとデータベースの間で自動同期を実装しようとしています。
私は私が私の変数products_copy更新するデータベースからのデータを取得するには、以下の機能ごとに10秒を実行している:私は私の実際を更新したいこのデータに変更があるたび
$interval(function(){$scope.getProductsSync();},10000);
$scope.getProductsSync = function() {
var q = $q.defer();
$http({
url: '/getData/getProducts.php',
method: "POST",
data: {"user_id":$scope.user_id}
})
.then(function(response) {
if(response.data.valid)
{
console.log('Products sync complete: '+new Date().toLocaleTimeString());
console.log(response.data.products);
$scope.products_copy = response.data.products;
q.resolve('Products sync complete');
}
else if(response.data.msg=="offline")
{
console.log('Products sync offline');
q.resolve('Products sync offline');
}
else
{
console.log('Products sync error');
console.log(response);
q.reject('Products sync error');
}
},
function(response) {
console.log('Products sync error');
console.log(response);
q.reject('Products sync error');
});
return q.promise;
}
をアレイによって定義される私のモデルの製品リスト製品。したがって、$ watchCollectionサービスを使用してデータの変更を検出し、変更があったときにモデルを更新しています。ただし、データベースからのデータは変更されていなくても、各呼び出しでこの変更がトリガーされます。
私のような配列の変化がある場合にのみイベントがトリガされるようにしたい$scope.$watchCollection('products_copy', function (newValue, oldValue, scope) {
if(newValue!==oldValue)
{
console.log('Watch on products was called');
console.log('Old value: '+oldValue);
console.log('New value: '+newValue);
$scope.products = newValue;
}
});
:
- 取り除きアイテム
- 編集いずれかの項目
編集1:
それをangular.equalsに変更しましたが、それでもすべての呼び出しでトリガーになりました。しかし、コンソールの各項目を調べると、angleは、項目間で変化するプロパティ$$ hashkeyを追加していることに気付きました。どのようにこれを解決するための任意のアイデア?
これは** s ** – noppa
で正しいです、angular.equalsです。正しい、更新されました –
私はangular.equalsを使ってみましたが、それは毎回トリガします。しかし、私はコンソール上の各項目をチェックし、$$ hashkeyと呼ばれるものがあります。これは新しいフェッチごとに異なる各項目に挿入されています。これは不平等になっています。どのように私はこれを解決する任意のアイデア? –