Эта проблема:
Когда вам нужно перебрать коллекцию в Angular 2, вы, вероятно, будете использовать директиву ngFor, которая будет создавать экземпляр шаблона один раз для каждого элемента из коллекции.
Если нам нужно в какой-то момент изменить данные в коллекции, например, в результате запроса API, у нас возникнет проблема, потому что Angular не может отслеживать элементы в коллекции и не знает, какие элементы были удалены. или добавил.
В результате Angular необходимо удалить все элементы DOM, связанные с данными, и создать их снова. Это означает множество манипуляций с DOM, особенно в случае большой коллекции, а, как мы знаем, манипуляции с DOM обходятся дорого.
Примечание: когда я говорю «изменить данные», я имею в виду замену коллекции новыми объектами, а не сохранение той же ссылки.
Давайте посмотрим на это в действии:
Решение:
Мы можем помочь Angular отслеживать, какие элементы добавлены или удалены, предоставив функцию trackBy
. Функция trackBy
принимает индекс и текущий элемент в качестве аргументов и должна возвращать уникальный идентификатор для этого элемента.
Теперь, когда вы меняете коллекцию, Angular может отслеживать, какие элементы были добавлены или удалены в соответствии с уникальным идентификатором, и создавать или уничтожать только те элементы, которые были изменены.
Это все. Вы можете поиграть с кодом здесь.
Что нельзя пропустить:
☞ Коснитесь или щелкните «︎ ❤» , чтобы помочь продвинуть этот фрагмент среди других.