У меня есть служба, возвращающая статическое сохранение данных JSON в переменную переменной $scope
как это:
$scope.workout = Workouts.get(id);
Я манипулирую этим $scope.workout
с помощью shift()
и slice()
. Когда я пытаюсь установить $scope.workout
исходным данным из Сервиса, это не сработает.
$scope.workout = Workouts.get(id);
$scope.workout
. Я думал, что другой вызов службы обновит данные? Я ошибаюсь? Как получить исходные данные, сохраненные в службе?
object
является ссылочным типом. Итак, почему вы возвращаете его из service
, он возвращает reference
. Это означает, что у вас есть 2 reference
на один и тот же объект (из службы и в области). Поэтому, если вы меняете объект из одной ссылки, он также будет изменен для другой справки.
Вам нужно скопировать свой объект. Просто вы можете это сделать
angular.copy(Workouts.get(id), $scope.workout);
И работайте с вашим $scope.workout
в своем контроллере.
1 может быть, скопируйте свой $scope.workout
другому объекту и верните его в $scope.workout
.
$scope.workout = Workouts.get(id);
var copyObj = angular.copy($scope.workout);
copyObj
будет всегда иметь пустой JSON.
Если вы используете это для функции редактирования, сделайте копию объекта для внесения изменений, чтобы он не повлиял на оригинал.
$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
будет иметь внесенные в него изменения.
$scope.workout
будет всегда иметь пустой JSON.
Хотя я не уверен, где ваш код ошибочен (я не так хорош в AngularJS!) Быстрый взлом, который вы можете использовать, заключается в следующем: Назначьте исходные данные новой переменной сферы. THEN назначьте свою переменную тренировки из нашей новой переменной области. Теперь мы можем обновить тренировку из нашей новой переменной в любое время.
Вы можете попробовать $ route.reload обновить введенные данные.