ANGULAR-UI-ROUTER: разрешение состояния по URL
Я делаю приложение с динамическими состояниями, и иногда мне нужно разрешить имя состояния из URL.
например: у меня есть/dashboard/user/12268
и мне нужно получить государство'dashboard.user'
.
Есть ли способ сделать это с помощью инструментов, предоставленныхui-router
? Я не могу узнать, как это сделать прямо сейчас ...
Я делаю приложение с динамической загрузкой модуля с requireJS. В первый раз проблем нет, потому что пользователь отправляется в состояние входа в систему. После входа в систему я использую require для загрузки только тех состояний, к которым у пользователя есть доступ. Но когда пользователь перезагружает страницу, я загружаю модули снова, и мне нужно преобразовать URL в состояние, и возникает проблема. Я начал пытаться с urlMatcherFactory, но не могу их разрешить.
Состояние загружается после разрешения URL.
Поток есть (после обновления страницыhttp://localhost:8090/index.html#/dashboard/user/12268
):
ui-router
был загруженполучить состояния, к которым пользователь имеет доступ, и зарегистрировать их (эти состояния зарегистрированыпосле этап настройки)узнать, если у меня есть состояние, которое соответствует данному URL для перенаправления туда. Вот где я застрял.Чтобы загрузить состояния после начальной загрузки приложения, я использовал вариантРешение бена наделя это включает в себя состояния и константы.
мойdata-main
в RequireJS есть этот код инициализации:
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
});
}
});
loadManifest
Функция регистрирует все элементы после загрузки в моем приложении (сервисы, фабрики, контроллеры, маршрутизаторы, ...).
Спасибо за вашу помощь,
Alx