Como acessar resolvido com a data dentro de raiz âmbito
-
21-12-2019 - |
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.
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 :-)