2013-04-11 36 views
5

Tôi có một tập lệnh góc, phát sóng sự kiện trên $ rootScope (sử dụng $$ phát sóng). Các phiên bản của góc Tôi đang sử dụng là 1.1.4

Trên một số dịp, này ném một ngoại lệ bên trong mã góc:

của router Lỗi Loại: không thể đọc được bất động sản '$$ nextSibling' của null.

Có ai có manh mối nào có thể gây ra lỗi này không? Thật không may mã mà trong đó lỗi này xảy ra là lớn để đăng bài, nhưng có lẽ ai đó có thể chỉ cho tôi đi đúng hướng?

Mã góc nơi nó xảy ra là:

// Insanity Warning: scope depth-first traversal 
     // yes, this code is a bit crazy, but it works and we have tests to prove it! 
     // this piece should be kept in sync with the traversal in $digest 
     if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) { 
     while(current !== target && !(next = current.$$nextSibling)) { 

trên câu lệnh while

update: phát sóng là excuted từ bên trong một sự kiện nhấp vào một thành phần bên ngoài sự kiện nhấp chuột là một tài sản của một đối tượng cấu hình cho thành phần bên ngoài.

+0

Ouch. Tôi nghĩ rằng mã chạy trong một chu kỳ tiêu hóa để tìm tất cả các phạm vi. Có vẻ 'hiện tại' không được xác định. Bạn đang làm bất cứ điều gì kỳ lạ với phạm vi? như tạo của riêng bạn, hoặc phá hủy chúng bằng tay? –

+0

không phải là tôi biết ... xem bản cập nhật để biết thêm thông tin về tình huống xảy ra – rekna

Trả lời

-2

Sự cố nằm trong việc sử dụng hoặc thiếu sử dụng $$ áp dụng trên phạm vi. Đôi khi tôi cần phải sử dụng $$ áp dụng vào các dịp khác mà tôi đã có trong giai đoạn áp dụng ... Sp Tôi đã kết thúc thực hiện safeApply (tìm thấy một nơi nào đó trên internet). Tự hỏi tại sao điều này không phải là tiêu chuẩn thực hiện trong góc vì nó thực sự đơn giản để thực hiện, và nó đơn giản hoá mã hóa

+1

Bạn có thể thắc mắc tại sao tất cả các downvotes. Vâng, những gì bạn nói về được coi là một mô hình chống của đội Angular. Mặc dù cách tiếp cận "áp dụng an toàn" hoạt động, nó không phải là giải pháp thích hợp. Bạn nên loại bỏ mọi thứ trong $ timeout() để mã của bạn được áp dụng đúng cách trong lần thông báo tiếp theo. Xem ở đây về mẫu chống: https://github.com/angular/angular.js/wiki/Anti-Patterns – mikesigs

12
$timeout(function(){ 
    //do stuff 
}); 

$timeout mà không có một thời gian chờ đợi làm việc là tốt.

+1

Cảm ơn bạn rất nhiều về mẹo! Tôi đã phải bọc $ vào hàm như $ scope này. $ On (...) {$ timeout (...() {myStuff();})}. Sau nhiều giờ thất vọng! Điều này đang sử dụng góc 1.0.8. – xeor

+0

Điều này làm việc cho tôi ... Cảm ơn .. :) –

+0

cảm ơn .. đã cứu tôi một vài giờ thất vọng Tôi chắc chắn! –

Các vấn đề liên quan