Іноді мені потрібно використовувати $scope.$apply
в моєму коді, а іноді він видає помилку "Дайджест вже триває". Тож я почав знаходити спосіб обійти це питання і знайшов таке запитання: AngularJS: Запобігти помилці $ digest, яка вже виконується при виклику $ scope. $ Apply () . Однак у коментарях (і на кутовій вікі) ви можете прочитати:
Не робіть, якщо (! $ Scope. $$ phase) $ scope. $ Apply (), це означає, що ваш $ scope. $ Apply () недостатньо високий у стеку викликів.
Отже, зараз у мене є два запитання:
- Чому саме це анти-шаблон?
- Як я можу безпечно використовувати $ scope. $ Застосувати?
Ще одне "рішення" для запобігання помилці "дайджест вже триває", схоже, використовує $ timeout:
$timeout(function() {
//...
});
Це такий шлях? Чи безпечніше? Тож ось справжнє запитання: Як я можу повністю виключити можливість помилки "дайджест, який вже виконується"?
PS: Я використовую лише $ scope. $ Застосовується у зворотних викликах, які не є синхронними. (наскільки я знаю, це ситуації, коли ви повинні використовувати $ scope. $ apply, якщо ви хочете, щоб ваші зміни були застосовані)
scope
всередині кута або ззовні кута. Тож відповідно до цього ви завжди знаєте, потрібно вам телефонуватиscope.$apply
чи ні. І якщо ви використовуєте один і той же код як для кутової, так і для некутовоїscope
маніпуляції, ви робите це неправильно, його слід завжди розділяти ... тому, в основному, якщо ви стикаєтесь із випадком, коли вам потрібно перевіритиscope.$$phase
, ваш код не є розроблений правильно, і завжди є спосіб зробити це «правильно»