Могу ли я предотвратить/задержать сбор данных AngularJS $при обновлении модели?
Есть ли способ отложить или задержать сборку?
У меня есть куча изменений, которые я хочу сделать для модели, но я не хочу, чтобы дайджест запускался, пока не были сделаны все изменения в модели. Некоторые объекты на модели имеют наблюдателей, которые меняют другие объекты на модели.
В идеале я хотел бы
- Остановить $digest
- Внесите все изменения в модель.
- Запустите $digest
$digest найдет все грязные объекты и запустит наблюдателей.
Другим решением для этого является, вместо того, чтобы останавливать $digest, я мог бы
- Удалить наблюдателей
- Внесите все изменения в модель (дайджест все еще работает)
- Добавить наблюдателей, которые были удалены.
После добавления наблюдателей мне нужно будет запустить методы наблюдения, чтобы убедиться, что модель находится в правильном состоянии.
Я просто чувствую, что второй вариант кажется его взломом.
Идеи??
Ответы
Ответ 1
Это вовсе не хак. Хороший вопрос, потому что большие наборы данных могут привести к тому, что цикл $digest будет работать очень медленно, когда пользователь быстро вводит текст или удерживает его обратно. Вы можете определенно сделать настройки производительности, как быть осторожными с вашими функциями $watch
и $filter
, но иногда это лучшая идея отложить $digest
, используя функцию debounce.