Как происходит обнаружение угловых изменений, когда вы привязываетесь к функции?
Из этих двух постов:
- Механика обновлений DOM в Angular
- Производительность Angular 2: лучше ли связываться с элементом данных, чем с функцией?
Я понимаю, как обновляется DOM, когда происходит "Обнаружение изменений". Из "Все, что вам нужно знать об обнаружении изменений в Angular" я не понимаю, как Angular отслеживает, какие свойства были использованы внутри функции и, следовательно, когда она должна запускать "Обнаружение изменений".
Давайте предположим, что это родительское представление компонентов.
<child [prop]="func()"></child>
где func()
является
func() { return this.parentProp }
а также parentProp
не был использован в шаблоне. Если и когда parentProp
меняется сервисом, как Angular знает, что func()
зависит от parentProp
и, следовательно, должен вызвать "Обнаружение изменений" и обновить представление.
1 ответ
Angular не знает и не заботится о содержании функции.
Угловой позвонит func()
каждый раз, когда выполняется обнаружение изменений, сравнивайте, совпадает ли предыдущий результат с текущим.
Поскольку вызов функции и сравнение результата намного дороже, чем просто сравнение предыдущего значения с текущим значением, лучше использовать событие, чтобы обновить свойство с результатом функции и связать представление только со свойством, а не с функционировать напрямую.
Если функция возвращает разные значения при последующих вызовах (с теми же значениями параметров), вы получите исключение в режиме разработки, например
модель изменилась с момента последней проверки