Tworzę aplikację ze stanami dynamicznymi, a czasami muszę rozwiązać nazwę stanu z adresu URL.ANGULAR-UI-ROUTER: rozwiń stan z adresu URL
np .: Mam /dashboard/user/12268
i potrzebuję uzyskać stan 'dashboard.user'
.
Czy można to zrobić za pomocą narzędzi dostarczonych przez ui-router
? Nie mogę się teraz dowiedzieć, jak to zrobić ...
Tworzę aplikację z dynamicznym ładowaniem modułów z requireJS. Na początku nie ma problemu, ponieważ użytkownik jest wysyłany do stanu logowania. Po zalogowaniu używam require, aby załadować tylko stany, do których użytkownik ma dostęp. Ale kiedy użytkownik ponownie załaduje stronę, ładuję moduły ponownie i muszę rozwiązać adres URL do stanu, i jest problem. Zacząłem próbować z urlMatcherFactory, ale nie mogę ich rozwiązać.
Stan jest ładowany po rozwiązaniu adresu URL.
Przepływ (po odświeżeniu strony http://localhost:8090/index.html#/dashboard/user/12268
):
- bootstrap aplikacji (bez stanów)
- w tym momencie,
ui-router
został załadowany - dostać stany użytkownik ma dostęp do i zarejestrować je (te stany są zarejestrowane po fazie konfiguracji)
- dowiedzieć się, czy mam stan, który pasuje do danego adresu URL, aby przekierować tam. To tutaj utknąłem.
Aby załadować stany po uruchomieniu aplikacji, użyłem odmiany Ben Nadel's solution, która zawiera stany i stałe.
My data-main
w RequireJS ma ten kod inicjalizacji:
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
});
}
});
Funkcja loadManifest
rejestruje wszystko po-bootstrap elementów na mojej aplikacji (usługi, fabryki, sterowniki, routery, ...).
Dzięki za pomoc,
Alx
proszę opublikuj to, co masz do tej pory. – tim
Tworzę aplikację z dynamicznym ładowaniem modułów z requireJS. Na początku nie ma problemu, ponieważ użytkownik jest wysyłany do stanu logowania. Po zalogowaniu używam require, aby załadować tylko stany, do których użytkownik ma dostęp. Po ponownym załadowaniu strony, ponownie ładuję moduły i muszę rozwiązać problem z adresem URL, a problem występuje. Zacząłem próbować z urlMatcherFactory, ale nie mogę ich rozwiązać. Stan jest ładowany po rozwiązaniu adresu URL. –
UI-Router Extras Future States może zarządzać scenariuszem dla ciebie: http://christopherthielen.github.io/uirouter -extras/#/future –