Создать временные значения в AngularJS

0

В угловом со мной произошло следующее

function(){
$scope.varObj = {"name" : "john" , "age" : "20" };
$scope.tempVar1 = $scope.varObj;
$scope.tempVar2 = $scope.varObj ;
}

Теперь, если я изменяю tempVar2 автоматически, значение tempVar1 изменяется.

    function(){
     $scope.varObj = {"name" : "john" , "age" : "20" };
     $scope.tempVar1 = $scope.varObj;
     $scope.tempVar2 = $scope.varObj;
     $scope.tempVar2.name = "mathews";
     console.log($scope.tempVar1.name); 
    }

Выход должен быть "john", потому что я изменяю значение tempVar2, а не tempVar1. Но к удивлению, выход - "mathews".

Я попробовал как угловые.copy, так и угловые. Extend, но оба они дают одинаковый результат. Может кто-нибудь помочь

Теги:

3 ответа

1
Лучший ответ

Я не вижу причин, чтобы он не работал с angular.copy

Heres - скрипка с демоверсией

1

Это происходит из-за двухстороннего связывания

Попробуйте это

 $scope.tempVar1 = angular.copy($scope.varObj);
1

Используйте angular.copy() для него. По умолчанию используется только копия с оператором присваивания = что означает совместное использование одного и того же пространства памяти, поэтому, если вы измените какой-либо из двух объектов, он отразится и на втором.

angular.copy() создаст глубокую копию объекта

DOC: -

Создает глубокую копию источника, который должен быть объектом или массивом.

$scope.varObj = {"name" : "john" , "age" : "20" };
     $scope.tempVar1 = angular.copy($scope.varObj);
     $scope.tempVar2 = angular.copy($scope.varObj);
     $scope.tempVar2.name = "mathews";
     console.log($scope.tempVar1.name); 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню