Ich versuche, die Nuancen der Verwendung des $ timeout-Dienstes in Angular als eine Art "sichere $ apply" -Methode besser zu verstehen. Grundsätzlich in Szenarien, in denen ein Code als Reaktion auf ein Angular-Ereignis oder ein Nicht-Angular-Ereignis wie jQuery oder ein Standard-DOM-Ereignis ausgeführt werden kann.
So wie ich die Dinge verstehe:
- Das Umschließen von Code in $ scope. $ Apply funktioniert gut in Szenarien, in denen Sie sich nicht bereits in einer Digest-Schleife befinden (auch bekannt als jQuery-Ereignis), aber einen Fehler auslösen, wenn ein Digest ausgeführt wird
- Das Umschließen von Code in einen $ timeout () -Aufruf ohne Verzögerungsparameter funktioniert unabhängig davon, ob er sich bereits in einem Digestzyklus befindet oder nicht
Wenn Sie sich den Angular-Quellcode ansehen, sieht es so aus, als würde $ timeout $ rootScope aufrufen. $ Apply ().
- Warum löst $ timeout () nicht auch einen Fehler aus, wenn bereits ein Digest-Zyklus ausgeführt wird?
- Ist es die beste Vorgehensweise, $ scope. $ Apply () zu verwenden, wenn Sie sicher sind, dass ein Digest noch nicht ausgeführt wird, und $ timeout (), wenn Sie es benötigen, um in beiden Fällen sicher zu sein?
- Ist $ timeout () wirklich eine akzeptable "sichere Anwendung" oder gibt es Fallstricke?
Vielen Dank für jeden Einblick.