2013-03-20 3 views
0

$scope.property을 다른 변수 var query의 값으로 정의하여 복사 중이며 var query의 값을 업데이트하면 값이 변경됩니다. $scope.property.

왜 이런 일이 발생하며이를 피할 수 있습니까?

var query = $scope.property; 
if(condition) { 
    console.log($scope.property); 
    $.extend(query, anotherObj); 
    console.log($scope.property); 
} 

콘솔의 출력은 다음과 같습니다 : 나는 바닐라 자바 ​​스크립트에서이 문제가 발생한 적이

> Object {details-type: "order", details-bind_date_formatted: "03/19/2013"} 
> Object {details-type: "order", details-bind_date_formatted: "03/19/2013", details-state: "CA"} 

내 코드는 다음과 같이 보입니다.

+0

나는 각도 및 이전에 응답 한 데와는 아무 상관이없는이 질문을 신고해야 하는가? –

답변

2

왜 이런 일이

당신은 query === $scope.property 것을 눈치 발생합니까? 이 둘은 정확히 동일한 오브젝트를 참조하며 두 개의 로그 문에서이를 변경합니다.

어떻게 피할 수 있습니까?

어떻게 이것을 피 하시겠습니까? query이 개체의 클론이 될 것으로 예상합니까? 그런 다음 How do I correctly clone a JavaScript object? 또는 What is the most efficient way to deep clone an object in JavaScript?을 참조하십시오.

바닐라 자바 ​​스크립트에서이 문제가 발생하지 않았습니다.

말도, jQuery를 만 바닐라 JS의 내장되어 있기 때문에 :

var scope = {a:{b:1}}; 
var a = scope.a; 
console.log(scope.a); // or just log(a); 
a.c = 0; // or scope.a.c = 0; 
console.log(scope.a); // or just log(a); 
+0

개체에 대한 참조가 아닌 개체의 복사본을 만들고 싶습니다. –

+0

저는 2 년간 자바 스크립트를 작성해 왔습니다. 나는 지금까지 이것을 결코 눈치 채지 못했다고 나는 믿을 수 없다. 권자 –

2
var query = angular.copy($scope.property); 
관련 문제