Это происходит, потому что Angular запускает обнаружение изменений при каждом перемещении мыши. Когда происходит обнаружение изменений, Angular выполняет все функции, которые связаны в шаблоне.
По этой причине (узкое место в производительности) не рекомендуется привязывать функции к шаблонам. Вы можете прочитать больше об этом здесь и здесь .
Теперь для фактического решения, вот описание подхода.
Поскольку это не быстрое решение, я не могу опубликовать полный код здесь, поэтому вам нужно будет использовать эти предложения для реализации. Если вы где-то застряли или не знаете некоторых моментов (например, как создать трубу), разместите отдельные вопросы или выполните поиск.
Вместо создания случайного цвета, идея состоит в том, чтобы создать цвет для каждой ячейки на основе значения в ячейке таблицы. Таким образом, вы можете использовать канал, чтобы получить код цвета на основе заданного c ввода:
- Вместо
[ngStyle]="getRandomColor()"
вы бы сделали что-то вроде этого: [style.background]="cellValue | getRandomColor"
.
Здесь cellValue
будет фактическим значением ячейки (или это также может быть номер строки или любое другое предопределенное значение, которое у вас есть), а getRandomColor
- это канал, который необходимо создать.
Создать трубу. Логика c для трубы может быть принята от
здесь .
Таким образом, цвет фона будет установлен на основе значения ячейки. И вы не столкнетесь с проблемой обнаружения изменений, как сейчас.