TypeError: Die Eigenschaft 'defaultPrevented' von undefined kann nicht gelesen werden

8

Ich erhalte diesen Fehler, wenn ich den folgenden Test mache:

%Vor%

Es bricht am $timeout.flush(intervalManager.pauseTimeoutTime+1); Die Methode $ timeout wird in intervalManager.pauseAnimationInterval() aufgerufen, die sich in SearchBoxData.init(intervalManager) :

befindet %Vor%

Ich habe diesen Fehler vorher nicht bekommen, ich bin mir nicht sicher, was ich falsch gemacht habe.

Update: Hier ist ein Stacktrace mit unminitierter Version von angularJS:

%Vor%

Update 2: Ich habe es auf die Injektion der SearchBoxData -Fabrik zurückverfolgt. Ich bin mir nicht sicher, was daran falsch ist. Das einfache Injizieren verursacht den Fehler, wenn ich eine $ timeout-Instanz erstelle und die flush-Methode verwende.

Update 3: Ich habe festgestellt, dass dies passiert, wenn ich $ location oder $ route in eine der Abhängigkeiten injiziere (indirekte, passiert es mit einigen grundlegenden Diensten, die ich überall verwende).

Update 4: Hier ist ein Plünderer, um es zu reproduzieren! Ссылка

    
Alex C 28.03.2014, 19:33
quelle

1 Antwort

25
___ tag123angularjs ___ Für Fragen zu AngularJS (1.x), dem Open-Source-JavaScript-Framework. Verwenden Sie dieses Tag NICHT für Angular 2 oder höhere Versionen. Verwenden Sie stattdessen das [eckige] -Tag. ___ qstntxt ___

Ich erhalte diesen Fehler, wenn ich den folgenden Test mache:

%Vor%

Es bricht am andCallThrough() Die Methode $ timeout wird in andCallFake() aufgerufen, die sich in %code% :

befindet %Vor%

Ich habe diesen Fehler vorher nicht bekommen, ich bin mir nicht sicher, was ich falsch gemacht habe.

Update: Hier ist ein Stacktrace mit unminitierter Version von angularJS:

%Vor%

Update 2: Ich habe es auf die Injektion der %code% -Fabrik zurückverfolgt. Ich bin mir nicht sicher, was daran falsch ist. Das einfache Injizieren verursacht den Fehler, wenn ich eine $ timeout-Instanz erstelle und die flush-Methode verwende.

Update 3: Ich habe festgestellt, dass dies passiert, wenn ich $ location oder $ route in eine der Abhängigkeiten injiziere (indirekte, passiert es mit einigen grundlegenden Diensten, die ich überall verwende).

Update 4: Hier ist ein Plünderer, um es zu reproduzieren! Ссылка

    
___ qstnhdr ___ TypeError: Die Eigenschaft 'defaultPrevented' von undefined kann nicht gelesen werden ___ tag123settimeout ___ setTimeout ist eine globale JavaScript-Methode, mit der eine bestimmte Funktion oder ein Code nach einer bestimmten Verzögerung ausgeführt wird. ___ antwort22882925 ___

Umfangsereignisse, die $ broadcast () 'd oder $ emit ()' d sind, sind synchron und geben das Ereignisobjekt zurück, wenn sie fertig sind.

Einige Dinge in Angular hängen von dem zurückgegebenen Ereignisobjekt ab, z. B. ngRoute.

Um dies zu beheben, fügen Sie einfach %code% hinzu, wenn Sie Ihren Spion erstellen, so dass er die ursprüngliche Funktion aufruft und einen Rückgabewert liefert.

Alternativ können Sie, wenn Sie nicht das echte $ broadcast verwenden möchten, %code% verwenden, um eine gefälschte Funktion zu liefern, die alles zurückgeben kann, was Sie wollen.

Beispiel:

%Vor%     
___
chronicsalsa 05.04.2014, 15:34
quelle

Tags und Links