Как сохранить данные с помощью маршрутизации AngularJS?

Я новичок в AngularJS и пытаюсь создать себе простое небольшое приложение. У меня есть данные JSON для приложения, которое выбирается с помощью $resource, и эти данные должны быть одинаковыми для нескольких видов/маршрутов. Однако, когда я перехожу на новый маршрут, данные JSON (хранятся как $scope.data) больше не доступны для нового представления. Что я могу сделать, чтобы передать эти данные в новое представление и не потребовать другую выборку? (Приложение учебного телефона-каталога повторно извлекает эти данные каждый раз из того, что я могу сказать.)

Из того, что я понимаю, $rootScope может это сделать, но, похоже, его вообще не одобряют. Прошу прощения, если это не имеет большого смысла; Я очень погружаюсь в глубокий конец здесь.

Ответы

Ответ 1

Используйте службу для хранения данных. Внесите эту услугу в каждый контроллер, которому необходим доступ к этим данным. Каждый раз, когда контроллер создается и выполняется (поскольку вы переключаетесь на другой вид/маршрут), он может запросить службу для данных. Если служба еще не имеет данных, она может отправить запрос на сервер и вернуть обещание контроллеру (см. Ниже, как это сделать). Если служба имеет данные, она может немедленно вернуть ее на контроллер.

См. также Обработка ответа $http в службе

Обратите внимание, что сервисы - это синглтоны, в отличие от контроллеров.

Другой вариант: при создании службы он может получить выборку самих данных, а затем сохранить их для последующего использования. Контроллеры могут не видеть $функций или функций в сервисе. Пример такого подхода см. В Как сохранить текущий контекст пользователя в Angular?