#angular #object #copy
#angular #объект #Копировать
Вопрос:
У меня есть вызов API, который возвращает некоторые данные:
this.myAPI.getProfile().subscribe(result => {
this.currentProfile = resu<
});
Теперь в моем проекте пользователь может редактировать информацию профиля, а для перехода в режим редактирования он нажимает на кнопку.
При входе в режим редактирования я создаю копию текущего объекта профиля, поэтому в случае, если пользователь отменит изменения (с помощью кнопки «Отмена»), я восстановлю исходные данные.
this.currentProfileCopy = JSON.parse(JSON.stringify(this.currentProfile));
Все работает отлично, но у меня проблема, я хочу отключить кнопку «Сохранить», если информация не была изменена, поэтому проверка будет:
this.currentProfile == this.currentProfileCopy
Проблема в том, что эта проверка никогда не возвращает true .
Я думаю, это связано с JSON.stringify
.
Я тоже пробовал:
JSON.parse(JSON.stringify(this.currentProfile)) == this.currentProfileCopy
Это также всегда возвращает false ..
Каков правильный способ реализовать это?
ВАЖНО: я не могу использовать Lodash, только методы Angular, поскольку я использую фреймворк, который создает код Angular, не могу импортировать внешние библиотеки. Я также не могу использовать такие вещи, как valueChanges и так далее, мне нужно сделать это, сравнив исходный объект и его копию.
Ответ №1:
Нет решения 1 для сравнения объектов. Все зависит от вашего объекта и от того, какие (типы) данных он содержит.
Основываясь на вашей ограниченной информации, я могу только предложить сравнить его на основе строки JSON, так что что-то вроде этого: JSON.stringify(this.currentProfile) === JSON.stringify(this.currentProfileCopy)
Комментарии:
1. объект содержит стандартные строки и целые числа (имя, фамилия, идентификатор пользователя). В любом случае это работает… Я перепробовал все комбинации, но не эту, поскольку предполагал, что скопированный объект уже был «stringified», поскольку я использовал этот метод для его копирования в первую очередь… хорошо, спасибо
Ответ №2:
Вы можете просто использовать JSON.stringify
метод для обеих сторон этого сравнения.
JSON.stringify(this.currentProfile) === JSON.stringify(this.currentProfileCopy)
Ответ №3:
Вы можете использовать lodash
библиотеку. Для сравнения двух объектов вы можете использовать isEqual
функцию.