Как происходит обнаружение угловых изменений, когда вы привязываетесь к функции?

Из этих двух постов:

Я понимаю, как обновляется DOM, когда происходит "Обнаружение изменений". Из "Все, что вам нужно знать об обнаружении изменений в Angular" я не понимаю, как Angular отслеживает, какие свойства были использованы внутри функции и, следовательно, когда она должна запускать "Обнаружение изменений".

Давайте предположим, что это родительское представление компонентов.

<child [prop]="func()"></child>

где func() является

func() { return this.parentProp }

а также parentProp не был использован в шаблоне. Если и когда parentProp меняется сервисом, как Angular знает, что func() зависит от parentProp и, следовательно, должен вызвать "Обнаружение изменений" и обновить представление.

1 ответ

Angular не знает и не заботится о содержании функции.

Угловой позвонит func() каждый раз, когда выполняется обнаружение изменений, сравнивайте, совпадает ли предыдущий результат с текущим.

Поскольку вызов функции и сравнение результата намного дороже, чем просто сравнение предыдущего значения с текущим значением, лучше использовать событие, чтобы обновить свойство с результатом функции и связать представление только со свойством, а не с функционировать напрямую.

Если функция возвращает разные значения при последующих вызовах (с теми же значениями параметров), вы получите исключение в режиме разработки, например

модель изменилась с момента последней проверки

Другие вопросы по тегам