У меня есть компонент таблицы данных (angular2-data-table), где мы изменили проект из Angular традиционного обнаружения изменений на OnPush
для оптимизации скорости рендеринга.
После того, как была реализована новая стратегия обнаружения изменений, была отмечена ошибка, ссылающаяся на таблицу, не обновляющуюся, когда объект данных мутирован, например, обновления свойств объекта. Ссылка: https://github.com/swimlane/angular2-data-table/issues/255. Мощный прецедент может быть применен для такого типа потребностей для таких вещей, как встроенное редактирование или внешние изменения данных, к одному свойству в большом сборе данных, таком как тикер акций.
Чтобы решить проблему, мы добавили настраиваемую проверку свойств trackBy с именем trackByProp
. Ссылка: commit. К сожалению, это решение не решило проблему.
На демонстрационной странице при живой перезагрузке вы можете увидеть демонстрацию, на которую ссылаются в приведенной выше операции фиксации, но не обновлять таблицу до тех пор, пока вы не нажмете на нее обнаружение изменений.
Структура компонента - это что-то вроде:
Table > Body > Row Group > Row > Cell
все эти компоненты реализуют OnPush
. Я использую геттеры/сеттеры в наборе строк для запуска перерасчета страниц, как показано здесь.
Мы хотим остаться с обнаружением изменений OnPush
для тех, кто реализует этот шаблон, однако, как проект с открытым исходным кодом с несколькими потребителями, можно утверждать, что какая-то пользовательская функция проверки для видимых значений строк на экране.
Все, что сказано, trackBy
не запускает обнаружение изменений в значениях ячеек строки, каков наилучший способ для этого?