2014-01-12 3 views
6

사용자가 $ rootScope ($ scope 일 수도 있음)의 변수를 기반으로 세부 사항을 편집 할 수있는 양식 작업.AngularJS 해당 변수를 바인드 해제

ng-model="formData.email" 

내가 기대 동작 대신 모델을 업데이트 할 만 $ rootScope.formData 업데이트되지만,이다, 모두 : 뷰에서

$rootScope.formData = $rootScope.user; 

은 입력에 NG 모델이 최신 정보.

둘 사이의 관계를 깨뜨릴 방법이 있습니까?

+0

기대와 함께 작동하도록 호출 할 수 있습니다 우리가 다른 (루트)를 기준으로 user을 전달하는 것을 의미 범위

은 잘못된 것입니다. 'user'는 참조입니다. JS의 객체는 참조로 전달됩니다. 그게 전부 야. 언제든지 clone 또는 cloneDeep (예 : lo-dash)를 호출 할 수 있습니다. 사실을 기반으로 디자인을 다시 생각해 보시기 바랍니다. JS 동작은 참조로 전달됩니다. –

+0

여러분은 맞습니다. 그리고 문서는 angular.copy()에 대한 예제와 같은 정확한 시나리오를 제공합니다. 당신이 대답을하면 나는 그것으로 표시 할 것입니다. 나는 그 방법으로 두 번째 var를 감싸기 만하면된다. 감사. http://docs.angularjs.org/api/angular.copy – Jazzy

답변

6

주석에서 설명한대로 JS 참조 서를 사용하고 있습니다. 우리는 angular.copy() 또는 cloneDeep()이 (lo-dash 참조) 새로운 인스턴스 여기

+0

적어도 내 전반적인 기술은 자신의 문서에 의해 확인되었습니다 :) – Jazzy

1

문제는 한 개체를 다른 개체로 설정했기 때문입니다. 객체는 Javascript에서 참조로 전달되므로 $rootScope.formData$rootScope.user에 대한 포인터로 만들었습니다. 이것이 하나를 업데이트하는 것이 다른 것을 업데이트하는 이유입니다.

당신은 $rootScope.user = null; 일 수 있습니다. 이것은 본질적으로 참조를 제거 할 수 있지만 처음에는 참조를 잃어 버렸을 것입니다. 그럴 수 없다면 user 개체를 formData으로 복제 할 수 있습니다.이 기능을 제공하는 라이브러리가없는 경우 그 자체로 위업이 될 수 있습니다.

관련 문제