Угловая область обновления из сервиса с начальными данными

0

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

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

Я манипулирую этим $scope.workout с помощью shift() и slice(). Когда я пытаюсь установить $scope.workout исходным данным из Сервиса, это не сработает.

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

$scope.workout. Я думал, что другой вызов службы обновит данные? Я ошибаюсь? Как получить исходные данные, сохраненные в службе?

  • 0
    Вы возвращаете JSON или уже преобразовали JSON?
  • 0
    Я возвращаю объект. Извините за эту ошибку.
Показать ещё 2 комментария
Теги:

5 ответов

0
Лучший ответ

object является ссылочным типом. Итак, почему вы возвращаете его из service, он возвращает reference. Это означает, что у вас есть 2 reference на один и тот же объект (из службы и в области). Поэтому, если вы меняете объект из одной ссылки, он также будет изменен для другой справки.
Вам нужно скопировать свой объект. Просто вы можете это сделать

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

И работайте с вашим $scope.workout в своем контроллере.

  • 0
    Я хочу получить именно тот объект, который я жестко запрограммировал на службу. Как это сделать?
  • 0
    @ m1crdy см редактировать. Можете ли вы показать свой объект?
Показать ещё 4 комментария
1

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

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

var copyObj = angular.copy($scope.workout);
  • 0
    Это будет работать? Как вы можете убедиться, что angular.copy вызывается после разрешения 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
    Я печатал похожий ответ. Это будет работать? Как вы можете убедиться, что angular.copy вызывается после разрешения http get? Я подозреваю, что $scope.workout будет всегда иметь пустой JSON.
  • 1
    ОП сказал, что метод get возвращает объект, а не обещание.
Показать ещё 2 комментария
0

Хотя я не уверен, где ваш код ошибочен (я не так хорош в AngularJS!) Быстрый взлом, который вы можете использовать, заключается в следующем: Назначьте исходные данные новой переменной сферы. THEN назначьте свою переменную тренировки из нашей новой переменной области. Теперь мы можем обновить тренировку из нашей новой переменной в любое время.

-1

Вы можете попробовать $ route.reload обновить введенные данные.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню