2013-04-11 16 views
5

Mam skośny skrypt, który emituje wydarzenie na $ rootScope (przy użyciu transmisji $$). Wersja kątowa używam to 1.1.4

Na niektórych okazjach, to zgłasza wyjątek wewnątrz kodu kątowej:

Uncaught TypeError: nie można odczytać właściwość „$$ nextSibling” null.

Czy ktoś ma pojęcia, co może być przyczyną tego błędu? Niestety kod, w którym pojawia się ten błąd, ma duże znaczenie, ale może ktoś mógłby wskazać mi właściwy kierunek?

kątowe kod gdzie to się dzieje:

// 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)) { 

na while

zmiana: audycja jest uruchamiane od wewnątrz klikniętego imprezy na urządzenia zewnętrznego zdarzenia click jest własnością obiekt konfiguracyjny dla komponentu zewnętrznego.

+0

Ouch. Myślę, że kod ten działa podczas cyklu trawienia, aby znaleźć wszystkie zakresy. Wygląda na to, że 'current' nie jest zdefiniowany. Robisz coś dziwnego w teleskopach? jak tworzyć własne lub niszczyć je ręcznie? –

+0

nie, że jestem świadomy ... zobacz aktualizację, aby uzyskać więcej informacji o sytuacji, w której się zdarza – rekna

Odpowiedz

-2

Problem polega na użyciu lub nieużytkowaniu $$. Czasami musiałem używać $$-a przy innych okazjach, które już znalazłem w fazie stosowania ... Sp skończyłem implementując safeApply (znalezione gdzieś w Internecie). Zastanawiam się, dlaczego nie jest to standardowy realizowany w kanciasty, ponieważ jest to bardzo proste do wykonania, a to upraszcza kodowanie

+1

Możesz się zastanawiać, dlaczego wszystkie spadki. Cóż, to, o czym mówisz, jest uważane za antysztag przez zespół Angular. Chociaż podejście "bezpieczne stosowanie" działa, nie jest właściwym rozwiązaniem. Lepiej zawijaj rzeczy w $ timeout(), aby twój kod został poprawnie zastosowany podczas następnego trawienia. Zobacz tutaj w odniesieniu do anty-wzór: https://github.com/angular/angular.js/wiki/Anti-Patterns – mikesigs

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

$timeout bez czasu oczekiwania działa również.

+1

Wielkie dzięki za cynk! Musiałem zawinąć $ na funkcji takiej jak ta $ scope. $ On (...) {$ timeout (...() {myStuff();})}. Po wielu godzinach frustracji! Używa się kątowego 1.0.8. – xeor

+0

To zadziałało dla mnie ... Dziękuję .. :) –

+0

dziękuję .. ocaliłem mi kilka godzin frustracji Jestem pewien! –

Powiązane problemy