Pergunta

Na minha aplicação eu tenho afirma que buscar diversos recursos de servidor usando resolve cláusula.

Eu também tenho uma global controlador de ter acesso a estes recursos.Por exemplo, considere uma trilha que precisa mostrar alguns dados desses recursos.

Como posso acessar esses recursos do global controlador?Mesmo se eu tiver o estado de objeto na mão, eu não conseguia entender como extrair os resolvido propriedades.

EDITAR:Eu estou usando a interface do usuário do roteador pacote para o encaminhamento.

Foi útil?

Solução 2

A ideia é adicionar um resolver-chave de que depende os dados necessários (ver breadcrumb no código abaixo).Quando a função desta tecla é invocada, podemos estar seguros de que nossos dados item é pronto para usar.Então vamos colocá-lo sobre o estado (data propriedade).

.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'
}

Para consumir os dados do global controlador, nós simples examinar $state.current.data.

Outras dicas

Como eu entendo que você tem algo parecido com isso:

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

E você precisa de acesso a dados em um global do controlador.Eu teria que ver um exemplo de código para entender perfeitamente o que você quer, mas eu gostaria de sugerir o uso de um serviço compartilhado.

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

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

Um serviço tem apenas uma instância por isso, é fácil de usar, para compartilhar o estado e recursos entre os controladores.

Espero que isso ajude.

atualização:

Criar uma resolução de encerramento:

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;
     })
    }
  })

Então, basicamente, você passa específicas de resolução de que você precisa para buscar os dados.O "myResolveClosure" vai envolver uma função de todo o resolvedor, passando em $q específicas de resolução de fazer alguma busca.Ele, então, tomar os dados resolvido a partir específicas de resolução e passá-lo para o mundial de controlador e, em seguida, resolver-se de modo que qualquer controlador especificado por você também irá obter os dados.

Espero que isso faz sentido :-)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top