Ayrıca sonsuz bir döngü olmaması ihtimali de var. 10 yineleme, bunu herhangi bir kesinlik ile sonuçlandırmak için yeterince büyük bir sayı değildir. Bu nedenle, bir yaban kazı avına çıkmadan önce bu olasılığı göz ardı etmeniz tavsiye edilebilir.
Bunu yapmanın en kolay yöntemi, maksimum özet döngü sayısını çok daha büyük bir sayıya çıkarmaktır, bu module.config
yöntem kullanılarak $rootScopeProvider.digestTtl(limit)
yöntemde yapılabilir. Eğer infdig
hata artık görünmüyor sadece bazı yeterince karmaşık güncelleme mantığı var.
Özyinelemeli saatlere dayanarak veri veya görünümler oluşturursanız while
, for
veya kullanarak yinelemeli çözümler aramak isteyebilirsiniz (yani , başlatılacak yeni özet döngülerine güvenmeden) Array.forEach
. Bazen yapı çok iç içe geçmiş durumdadır ve hatta yinelemeli bile değildir, bu durumlarda muhtemelen limiti yükseltmek dışında yapılacak çok şey yoktur.
Hatayı ayıklamanın başka bir yöntemi de özet verilere bakmaktır. JSON'u oldukça yazdırırsanız, bir dizi dizi elde edersiniz. Her bir üst düzey giriş bir yinelemeyi temsil eder, her yineleme, izleme girişlerinin bir listesinden oluşur.
Örneğin $watch
, kendi içinde değiştirilmiş bir özelliğiniz varsa , değerin sonsuz bir şekilde değiştiğini görmek kolaydır:
$scope.vm.value1 = true;
$scope.$watch("vm.value1", function(newValue)
{
$scope.vm.value1 = !newValue;
});
[
[
{
"msg":"vm.value1",
"newVal":true,
"oldVal":false
}
],
[
{
"msg":"vm.value1",
"newVal":false,
"oldVal":true
}
],
[
{
"msg":"vm.value1",
"newVal":true,
"oldVal":false
}
],
[
{
"msg":"vm.value1",
"newVal":false,
"oldVal":true
}
],
[
{
"msg":"vm.value1",
"newVal":true,
"oldVal":false
}
]
]
Elbette daha büyük bir projede bu o kadar basit olmayabilir, özellikle de saatin interpolasyon olması durumunda msg
alanın değeri genellikle vardır ."fn: regularInterceptedExpression"
{{ }}
Bunun dışında, sorunun kaynağını bulmak için HTML'yi kesmek gibi daha önce bahsedilen yöntemler elbette faydalıdır.