2016-07-21 4 views
0

나는이 같은 $scope 변수에 저장하는 정적 JSON 데이터를 반환하는 서비스가있다. 서비스의 초기 데이터에 $scope.workout을 설정하려고하면이 작업이 수행되지 않습니다.각도 새로 고침 범위는

$scope.workout = Workouts.get(id); 

$scope.workout이 변경되었습니다. 나는 서비스의 또 다른 호출이 데이터를 새로 고침 할 것이라고 생각 했는가? 내가 잘못? 초기 데이터를 서비스에 저장하는 방법은 무엇입니까?

+0

JSON이 반환되었거나 이미 JSON으로 변환 되었습니까? –

+0

개체를 반환합니다. 실수해서 미안해. – m1crdy

+0

전체 코드를 게시하십시오. – Ved

답변

0

object참조 유형입니다. 그렇다면 service에서 반환하는 이유는 reference입니다. 즉, 서비스 및 범위의 동일한 개체에 2 reference이 있다는 의미입니다. 따라서 하나의 참조에서 객체를 변경하면 다른 참조에서도 변경됩니다.
개체를 복사해야합니다. 단순히 당신이

angular.copy(Workouts.get(id), $scope.workout); 

그것을 할 그리고 컨트롤러에 $scope.workout하여 작업 할 수 있습니다.

+0

나는 내 서비스에 하드 코드 된 것을 정확히 그 객체에 넣고 싶습니다. 그렇게하는 방법? – m1crdy

+0

@ m1crdy 수정 된 내용을 참조하십시오. 개체를 보여 주실 수 있습니까? –

+0

@ m1crdy 편집 된 버전 –

-1

삽입 된 데이터를 새로 고치려면 $ route.reload를 시도 할 수 있습니다.

0

코드가 잘못되어 있는지 잘 모르겠지만 (AngularJS에서는별로 좋지 않습니다!) 간단한 해킹을 사용하면 다음과 같습니다. 새 범위 변수에 초기 데이터 할당 다음에서 운동 변수를 할당하십시오. 새로운 스코프 변수. 이제 언제든지 새 변수에서 운동을 새로 고칠 수 있습니다.

1

1 해결 방법은 $scope.workout을 다른 개체으로 복사하고 $scope.workout에 다시 할당 할 수 있습니다.

$scope.workout = Workouts.get(id); 

var copyObj = angular.copy($scope.workout); 
+0

작동합니까? http get이 해결 된 후에 angular.copy가 호출되는지 어떻게 확신 할 수 있습니까? 나는'copyObj'가 항상 빈 JSON을 가질 것이라고 생각합니다. –

1

하면 편집 기능이를 사용하는 경우, 그래서 원본에 영향을주지 않습니다을 편집 할 객체의 복사본을 만듭니다.

$scope.workoutTarget = Workouts.get(id); 
$scope.workout = angular.copy($scope.workout); 

//you're free to make edits to $scope.workout without affecting the service 

저장 기능에서 개체를 병합하여 변경 내용을 커밋하십시오.

angular.merge($scope.workoutTarget, $scope.workout) 

이제 $scope.workoutTarget에 수정 사항이 적용됩니다.

+0

나는 비슷한 대답을 타이핑하고 있었다. 작동할까요? http get이 해결 된 후에 angular.copy가 호출되는지 어떻게 확신 할 수 있습니까? 나는'$ scope.workout'에 빈 JSON이 항상있을 것이라고 생각합니다. –

+1

OP는 get 메소드가 약속이 아니라 객체를 반환한다고 말했습니다. – DerekMT12

+0

나는'$ resource'을 사용하고 있다고 생각했습니다. –