Я проделал некоторое чтение и расследование этой ошибки, но не знаю, какой правильный ответ для моей ситуации. Я понимаю, что в режиме dev обнаружение изменений выполняется дважды, но я не хочу использовать enableProdMode()
для маскировки проблемы.
Вот простой пример, когда количество ячеек в таблице должно увеличиваться по мере расширения ширины div. (Обратите внимание, что ширина div не является функцией только ширины экрана, поэтому @Media не может быть легко применена)
Мой HTML выглядит следующим образом (widget.template.html):
<div #widgetParentDiv class="Content">
<p>Sample widget</p>
<table><tr>
<td>Value1</td>
<td *ngIf="widgetParentDiv.clientWidth>350">Value2</td>
<td *ngIf="widgetParentDiv.clientWidth>700">Value3</td>
</tr></table>
Это само по себе ничего не делает. Я предполагаю, что это происходит потому, что ничего не вызывают обнаружения изменений. Однако, когда я меняю первую строку на следующую и создаю пустую функцию для приема вызова, она начинает работать, но иногда я получаю выражение "Expression" после того, как была проверена ошибка "
<div #widgetParentDiv class="Content">
gets replaced with
<div #widgetParentDiv (window:resize)=parentResize(10) class="Content">
Мое лучшее предположение заключается в том, что с этой модификацией обнаружение изменений срабатывает, и все начинает отвечать, однако, когда ширина изменяется быстро, исключение генерируется, потому что предыдущая итерация обнаружения изменений занимает больше времени, чем изменение ширины div.
- Есть ли лучший способ запуска обнаружения изменений?
- Должен ли я записывать событие изменения размера с помощью функции, чтобы обеспечить происходит обнаружение изменений?
- Использует #widthParentDiv для доступа к ширина div приемлема?
- Есть ли лучшее общее решение?
Подробнее о моем проекте см. этот аналогичный вопрос.
Спасибо