我正在製作具有動態狀態的應用程序,有時我需要從url解析狀態名稱。ANGULAR-UI-ROUTER:從URL解析狀態
例如:我有/dashboard/user/12268
,我需要得到狀態'dashboard.user'
。
有什麼辦法可以用ui-router
給出的工具做到這一點?我現在無法知道如何執行此操作...
我正在使用requireJS加載動態模塊加載的應用程序。第一次沒有問題,因爲用戶被髮送到登錄狀態。登錄後,我使用require只加載用戶有權訪問的狀態。但是,當用戶重新加載頁面時,我再次加載模塊,並需要將url解析爲狀態,並且存在問題。我已經開始嘗試使用urlMatcherFactory,但無法解決它們。
狀態在URL解析後加載。
的流動(http://localhost:8090/index.html#/dashboard/user/12268
頁面刷新後):
- 引導應用程序(不包括美國)
- 在這一點上,
ui-router
已加載 - 獲得用戶訪問狀態並註冊它們(這些狀態在配置階段後註冊)
- 找出我是否有一個狀態匹配給定的URL重定向到那裏。這是我卡住的地方。
要在應用程序引導後加載狀態,我使用了包含狀態和常量的Ben Nadel's solution的變體。
我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
請發佈到目前爲止 – tim
我正在使用requireJS加載動態模塊加載的應用程序。第一次沒有問題,因爲用戶被髮送到登錄狀態。登錄後,我使用require只加載用戶有權訪問的狀態。 但是當用戶重新加載頁面,我再次加載模塊,並且需要將URL解析到一個狀態,還有就是問題所在。我已經開始與urlMatcherFactory嘗試但不能解決他們 的URL解析後的狀態加載 –
UI-路由器額外未來狀態可以管理您的情況爲您提供:http://christopherthielen.github.io/ui-router -extras /#/未來 –