2015-09-24 13 views
10

Đây là một vấn đề thường gặp:

5 $ digest() lặp đạt được. Hủy bỏ!
Watchers bắn trong 5 lần lặp cuối cùng: []

Các tài liệu (https://docs.angularjs.org/error/ $ rootScope/infdig) giải thích những gì không nên làm để tránh tình trạng này.

Tuy nhiên, thỉnh thoảng, bạn vẫn gặp phải tình huống này. Và đối với một dự án lớn hơn một ứng dụng đồ chơi, việc tìm ra nguyên nhân của vòng lặp vô hạn có thể thực sự khó khăn.

Tôi đang tìm các gợi ý gỡ lỗi về cách tôi có thể tìm ra vị trí đặt mã gây ra vòng lặp.

Trả lời

2

Có thể có nhiều lý do. Một trong những lý do phổ biến mà tôi gặp phải là do bộ lọc trong ng-repeat trả về một mảng mới để hoạt động trên ng-repeat.

Vì vậy, hãy kiểm tra các biểu thức ng-repeat có bộ lọc liên quan đang sửa đổi mảng.

5

câu hỏi đã được trả lời ở đây - How to Troubleshoot Angular "10 $digest() iterations reached" Error

như một sơ yếu lý lịch của hai câu trả lời tốt nhất:

  1. loại bỏ tất cả các HTML đáng ngờ - về cơ bản loại bỏ tất cả html của bạn từ các mẫu, và kiểm tra xem có không có cảnh báo (https://stackoverflow.com/a/17129274/274500)
  2. thường xảy ra khi chức năng trả về đối tượng mới (https://stackoverflow.com/a/17116322/274500)

cộng

bạn luôn có thể đặt có điều kiện breakpoint đây https://github.com/angular/angular.js/blob/master/src/ng/rootScope.js#L851 để kiểm tra stacktrace ngoại lệ.

+0

Trong trường hợp của tôi, vấn đề là không có vòng lặp vô hạn nào cả, vì tôi đảm bảo luôn trả về cùng một tham chiếu đối tượng. Tôi có chi tiết cách gỡ lỗi trong [câu trả lời cho câu hỏi được liên kết] (http://stackoverflow.com/a/38981431/546730). Trường hợp này là khá hiếm mặc dù ... –

0

Đối với tôi những lỗi đã xảy ra trong một phương pháp thay đổi url:

self.setURL = function(item) { 
    var mainUrl = window.location.origin + '#/' + self.baseUrl; 
    if (item) { 
     mainUrl += item.testId; 
    } 
    $location.$$absUrl = mainUrl; 
    }; 

này đã gây ra lỗi $rootScope:infdig

Vì vậy, khi gỡ lỗi kiểm tra này bất cứ điều gì đang thay đổi ur của bạn, vị trí, hrefs tại của bạn bộ điều khiển/chỉ thị hiện tại