@timofy

Как избежать «чрезмерной привязки» в AngularJs?

Дело в следующем: в личном кабинете пользователя делаю функционал, с помощью которого пользователь мог бы изменять свои личные данные. Выглядит он так: с сервера подгружаются уже существующие данные пользователя. На странице имеется форма с полями, в которых отображаются уже существующие данные пользователя. Эти поля выглядят примерно вот так:

<input ng-model="myData.name"> (использую ангуляровскую привязку ng-model)

Пользователь будет иметь возможность изменять свои данные, корректируя их в этих полях. В конце формы две кнопки: "Сохранить изменения" и "Отменить изменения". Для того, чтобы работала кнопка "Отменить изменения" я написал так:
$scope.user = $rootScope.myData
то есть чтобы в объекте $scope.user сохранить уже существующие данные пользователя, а потом если пользователь нажмет "Отменить изменения" - в таком случае чтобы сработала функция, которая "восстановит" данные.
Вот такой я сделал эту функцию:
$scope.cancel = function () {
      $rootScope.myData  =  $scope.user;
}

Но как оказалось: если меняешь данные в поле (которые привязаны
к объекту $rootScope.myData), то они меняются не только в объекте $rootScope.myData, но и в объекте $scope.user. Какая-то "чересчур мудрая" привязка у AngularJs: меняет данные не только в том объекте, к которому привязана, но и в том, из которого скопированы данные в привязанный объект.
Можно это как-то предотвратить или писать этот функционал без Ангуляровской привязки ?
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
0xD34F
@0xD34F
$scope.user = $rootScope.myData

скопированы данные

Не скопированы. При присваивании объектов копируются не значения, а ссылки. Копирование, это чуть посложнее:

$scope.user = Object.assign({}, $rootScope.myData)

Или

$scope.user = { ...$rootScope.myData }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы