ANGULAR-UI-ROUTER: resolver o estado do URL
Estou criando um aplicativo com estados dinâmicos e, às vezes, preciso resolver o nome do estado pelo URL.
por exemplo: eu tenho/dashboard/user/12268
e eu preciso pegar o estado'dashboard.user'
.
Existe alguma maneira de fazer isso com as ferramentas fornecidas porui-router
? Não consigo descobrir como fazer isso agora ...
Estou criando um aplicativo com carregamento de módulo dinâmico com requireJS. Na primeira vez, não há problema porque o usuário é enviado ao estado de login. Após o login, eu uso o exigir para carregar apenas os estados aos quais o usuário tem acesso. Mas quando o usuário recarrega a página, carrego os módulos novamente e preciso resolver a URL para um estado, e há o problema. Comecei a tentar com o urlMatcherFactory, mas não consigo resolvê-los.
O estado é carregado após a resolução da URL.
O fluxo é (após a atualização da páginahttp://localhost:8090/index.html#/dashboard/user/12268
):
ui-router
foi carregadoobter os estados aos quais o usuário tem acesso e registrá-los (esses estados são registradosdepois de fase de configuração)descobrir se eu tenho um estado que corresponde ao URL fornecido para redirecionar para lá. É aqui que estou preso.Para carregar estados após a inicialização do aplicativo, usei uma variação deA solução de Ben Nadel isso inclui estados e constantes.
Minhasdata-main
em RequireJS tem este código de inicialização:
require.config({
// REQUIREJS CONFIGURATION
});
require(['app'], function (app) {
app.bootstrap(document);
var ng = angular.injector(['ng']);
var $window = ng.get('$window')
var $q = ng.get('$q');
var appStorage = $window.localStorage;
var loadedManifests;
try {
loadedManifests = JSON.parse(appStorage.getItem('loadedManifests'));
} catch(e) {
loadedManifests = [];
}
if (!angular.isArray(loadedManifests) || loadedManifests.length === 0) {
$q.all([
app.loadManifest('login/manifest'), //loadMainfest function loads the states for login
app.loadManifest('logout/manifest') //load states for logout
])
.then(function () {
app.injector.get('$rootScope').$evalAsync(function () {
app.injector.get('$state').go('login');
});
});
} else {
var promisesArray = [];
for(var i = 0; loadedManifests[i]; i++) {
promisesArray.push(app.loadManifest(loadedManifests[i])); //load all manifests registered on localstorage
}
$q.all(promisesArray).then(function(){
//TODO: Stuck. Get URL from querystring and resolve to valid state, or redirect to /login
});
}
});
oloadManifest
A função registra todos os elementos pós-inicialização no meu aplicativo (serviços, fábricas, controladores, roteadores, ...).
Obrigado pela ajuda,
Alx