我尝试使用规则函数设置.otherwise()来确定默认网址。我无法注入状态或读取路径,因为应用程序尚未加载,我真正需要做的是类似于.otherwise()中的解析来检查我的UserService并ping服务器对于会话,因为我的UserService.isLoggedIn未定义。你如何处理不同的默认URL,你真的需要解决这些问题?
答案 0 :(得分:2)
查看官方文档中的示例:http://angular-ui.github.io/ui-router/site/#/api/ui.router.router。$ urlRouterProvider#methods_otherwise
// Example of using function rule as param
$urlRouterProvider.otherwise(function ($injector, $location) {
return '/a/valid/url';
});
您拥有$injector
和$location
,因此您可以随心所欲地抓住任何内容。如果您愿意,甚至可以将其包装在易于阅读的注射功能中:
function myOtherwiseFunction($state, UserService, Whatever) {
// check some $state stuff
if ($state.current) { /* blah */ }
// check some Whatever stuff
if (Whatever.myFancyLogic()) { /* blah */ }
if (UserService.isLoggedIn())
return "/app";
else
return "/login";
}
$urlRouterProvider.otherwise(function ($injector, $location) {
return $injector.invoke(myOtherwiseFunction);
});
答案 1 :(得分:0)
您可以在您的其他功能中调用您的函数isLogged。
但是......问题是你不能在你的配置功能中注入你的服务UserService(我想有点),因为它既不是常量也不是提供者。
您可以做的是在一个常量中调用您的日志记录过程,该常量返回一个类似解析函数的承诺:
.constant('login', function(){
var access = function(UserService){
return $q.when('start').then(function(){
return UserService.initSession(); // I suppose you have a similar function
})
}
access.$inject = ['UserService'];
return access;
})
在你的配置功能中:
.config([..., 'login',
...
$urlRouterProvider.otherwise(function() {
login();
...