2016-07-29 2 views
2

У меня есть массив объектов со свойствами name и age. Имя массива - person.Угловой 2 вид не обновляется при изменении массива

Проблема заключается в том, когда я обновить свойство элемента массива, как:

this.person[0].name = "godfather";

исходный массив обновляется, но вид компонента остается как есть. Я понял, что проблема заключается в том, что обнаружение углового изменения не учитывает обновление внутри массива как изменение. Итак, я попытался ниже утверждения (изменения ссылки на массив):

this.person = this.person.slice(); 

Я просто хочу знать, использую более позднее заявление хорошей практики или есть какой-то лучший подход для решения вышеуказанной проблемы?

ответ

1

Это зависит от стоимости этой slice() операции. Если это для небольших массивов, это может не нанести никакого вреда, но если это для больших массивов, это может вызвать заметные проблемы с производительностью. В этом случае с помощью наблюдаемого, который уведомляет приемника, активно об изменениях является лучшим способом.

+1

Что было бы лучшим решением? – mishap

+1

Наблюдаемый или используемый 'IterableDiffer' https://github.com/angular/angular/blob/14ee75924b6ae770115f7f260d720efa8bfb576a/modules/%40angular/common/src/directives/ng_for.ts#L111, возможно, другие. Зависит от конкретного варианта использования. –

0

Ваш подход - это неуказанное использование slice, которое может работать с некоторыми, но не со всеми реализациями JS. Я использовал это с успехом:

this.person = JSON.parse(JSON.stringify(this.person)); 
+0

Это выглядит довольно дорогостоящим в compairson. У вас есть ссылка, которая предоставляет дополнительную информацию о том, где 'slice()' может не работать? –

+1

Подход JSON дороже, да. Однако, если он используется только в пользовательском интерфейсе, а не в циклах или в другом критическом по времени коде, я не вижу проблемы. В соответствии со средой спецификации требуется хотя бы один параметр. Вызов без параметра не указан. – hholtij

+0

Просто 'slice (0)' сделал бы тогда, я думаю, также? –

Смежные вопросы