2016-07-21 2 views
0

У меня есть сервис возвращающегося статические данные в формате JSON сохранения в $scope переменной, как это:Угловая область видимости обновления от службы с начальными данными

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

I'm манипуляции это $scope.workout с shift() и slice(). Когда я пытаюсь установить $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!) Быстрый способ взлома: Назначьте исходные данные новой переменной сферы. THEN назначьте свою переменную тренировки из нашей новой переменной сферы. Теперь мы можем обновить тренировку из нашей новой переменной в любое время.

1

1 обходной путь может быть, скопируйте свой $scope.workout в другой Объект и назначьте его обратно на номер $scope.workout.

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

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

Будет ли это работать? Как вы могли убедиться, что вызов угловой.копии вызван после того, как http get разрешен? Я подозреваю, что '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 разрешен? Я подозреваю, что '$ scope.workout' будет иметь пустой JSON все время. –

+1

OP сказал, что метод get возвращает объект, а не обещание. – DerekMT12

+0

Я предполагал, что он использовал '$ resource'. –