Загрузка JSON один раз в начале работы приложения

72
16 февраля 2022, 11:50

Приложение на AngularJS. Есть корневой модуль:

    angular.module('myApp', ['categoriesList'])

к которому подключен модуль categoriesList

    angular.module('categoriesList', [])
    angular.module('categoriesList')
        .component('categoriesList', {
            templateUrl: 'categories-list/categories-list.template.html',
            controller: function CategoriesListController() {
            }
        })

Как загрузить данные JSON одни раз в начале приложения в модуле myApp, и затем передать их в другие модули.

Пробовал такой вариант, но т.к. данные приходят асинхронно, в categoriesList не присвоить результат:

    angular.module('myApp', ['categoriesList'])
      .run(function ($http, $rootScope) {
        $rootScope.isLoaded = false
        $http.get('http://127.0.0.1:8887/base.json')
          .then(response => {
            $rootScope.data = response.data
            $rootScope.isLoaded = true
          })
      })

Кроме того $rootScope доступен в модуле categoriesList, но свойства не наследуются. Их нужно переопределять $scope.load = $rootScope.isLoaded (хотя насколько я понял, должны просто наследоваться)

html:

    <html ng-app="myApp">
        ...
        <categories-list></categories-list>
        ...
Answer 1

Решил через промисы. В корневом модуле создается сервис:

    .factory('httpservice', function ($q, $http) {
        var deferred = $q.defer();
        deferred.resolve($http.get('http://127.0.0.1:8887/base.json'));
        return deferred.promise;
      })

Остальные модули используют его:

    let promise = httpservice
    promise.then(function (resp) {
        $scope.categories = resp.data.categories })

Возможно есть решение через $broadcast и $on.

READ ALSO
Javascript Нажатие кнопки на странице в браузере в определённое время

Javascript Нажатие кнопки на странице в браузере в определённое время

Мне нужно организовать нажатие кнопки на веб-странице в определённое время, которое я задамКод, который я вставляю в консоль хрома не работает,...

121
Оценить код, Может как-то улучшить

Оценить код, Может как-то улучшить

Ребят, не оценивайте верстку и адаптивностьГлавное - js код, а именно фильтрация https://github

100
vue Отфильтровать список по клику

vue Отфильтровать список по клику

Есть небольшой vue проект: codesandbox

134
Как скачать изображения из множества ссылок и каждой дать свой название?

Как скачать изображения из множества ссылок и каждой дать свой название?

У меня большое количество ссылок с изображением, мне нужно их скачатьНо не просто скачать, а каждой дать название

99