Ваш метод вызывается из шаблона для каждого цикла обнаружения изменений. Механизм обнаружения изменений пытается найти любые изменения в модели компонента, а затем повторно выполнить рендеринг измененных деталей.
Но вы можете управлять тем, как механизм обнаружения изменений работает с вашим компонентом, установив стратегию обнаружения изменений.
Стратегии обнаружения изменений
По умолчанию обнаружение изменений запускается по многим причинам - щелчки, прокрутка, или другие асин c события. Следовательно, метод может вызываться сотни / тысячи раз.
Но вы можете использовать changeDetection: ChangeDetectionStrategy.OnPush
в своем компоненте. Механизм обнаружения изменений проверяет изменения, только если @Input()
свойства были изменены.
Но это только половина решения ...
Избегайте использования методов в шаблоне
Другая половина - вообще не использовать метод в шаблоне и использовать там свойство класса. Кстати, следуйте тому же правилу для получателей , а также
<mat-row *matRowDef="let row; columns: columns"></mat-row>
Все, что вам нужно, это установить this.columns
в вашем классе, когда оно должно быть действительно изменено.
I надеюсь, это поможет.