Как получить доступ к решенной дате в корневой масштабе

StackOverflow https://stackoverflow.com//questions/25055921

  •  21-12-2019
  •  | 
  •  

Вопрос

В моем приложении у меня есть состояния, которые извлекают различные ресурсы с сервера, используя предложение resolve.

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

Как я могу получить доступ к этим ресурсам от глобального контроллера?Даже если у меня есть государственный объект под рукой, я не мог понять, как извлечь разрешенные свойства.

Редактировать: Я использую УМ-маршрутизатор Пакет для маршрутизации. .

Это было полезно?

Решение 2

Идея состоит в том, чтобы добавить решающий ключ, который зависит от необходимых данных (см. Генеракодицетагкод в коде ниже).Когда функция этого ключа вызывается, мы можем быть уверены, что наши данные RegacodicCode готов к использованию.Затем мы поместим его в состояние (свойство breadcrumb).

.state('some.item.detail.state', {
  url: '/:itemId',
  resolve: {
    item: function($stateParams, MyServerResource) { 
            return MyServerResource.get({itemId: $stateParams.itemId}).$promise;
          },
    breadcrumb: function(item) {
                  this.data = item;
                }
  },
  templateUrl: 'myTemplate.html'
}
.

Чтобы потреблять данные в глобальном контроллере, мы простым изучаем item.

Другие советы

Как я понимаю, у вас есть что-то подобное:

  .when('/', {
    controller: 'HomeCtrl',
    templateUrl: 'home.html',
    resolve: {data: someDataFetcher}
  })
.

И вам нужно получить доступ к данным в глобальном контроллере.Я должен был бы увидеть код кода, чтобы прекрасно понять, что вы хотите, но я бы предложил использовать общий сервис.

function HomeCtrl (data, myDataService) {
  myDataService.data = data;
}

function GlobalCtrl (myDataService) {
  myDataService.data // => The data
}
.

Услуга имеет только один экземпляр, поэтому легко использовать это, чтобы обмениваться состоянием и ресурсами в контроллерах.

Надеюсь, это поможет.

<Сильное> Обновление :

Создать измеренное закрытие:

var myResolveClosure = function (resolver) {
    // Return a wrapper around the resolver
    return function (globalController, $q) { 
      var deferred = $q.defer();
      resolver($q).then(function (data) {
        globalController.addData(data);
        deferred.resolve(data);
      }).catch(function () {
        deferred.reject();
      });
      return deferred.promise;
    }
}

  .when('/', {
    controller: 'HomeCtrl',
    templateUrl: 'home.html',
    resolve: {
     data: myResolveClosure(function ($q) {
       var deferred = $q.defer();
       // do something and resolve with the data
       return deferred.promise;
     })
    }
  })
.

Так что в основном вы проходите в конкретном Resolver, вам нужно получить эти данные.«MyReSolveCluity» будет обернуть функцию вокруг Resolver, проходя через $ q к конкретному Resolver, чтобы сделать некоторую выборку.Затем он возьмет данные, разрешенные от конкретного Resolver и передают его в глобальный контроллер, затем разрешают себя так, чтобы любой указанный вами контроллер также получит данные.

Надеюсь, это имеет смысл: -)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top