在允许切换到该状态之前,尝试让ui-router解析认证服务。
不幸的是,每当我注入一个不属于棱角分明的服务时,它会继续躲避我的角度。
我知道我无法将服务注入到.config中,但我确实应该可以在控制器加载之前完成它吗?
这是代码的缩减版本:
app.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
// For any unmatched url, redirect to state:home
$urlRouterProvider.otherwise("/");
// Now set up the states
$stateProvider
.state('home', {
url: "/",
templateUrl: "partials/home.html",
resolve: {
isAuthorised: ['$log', '$q', 'Auth', function ($log, $q, auth) {
var q = $q.defer();
$log.debug("checking if authorised..."); //this doesn't show
if (auth.whatever()) {
q.resolve(true);
} else {
q.reject(false);
}
return q.promise;
}]
},
controller: "DefaultCtrl"
});
}]);
因此控制器实际上从未实例化......控制台中没有错误。
如果我输入任何随机字符串作为服务名称,也会发生同样的情况...所以我最好的猜测是它无法找到它?但该应用程序的所有其他区域都可以......
我花了一段时间研究这个,我很确定我应该能够以某种方式完成这个。
任何帮助都会非常感激。
捐赠。
感谢 Chris T 为Plunkr!我正在讨论这个问题,我添加了你的控制台日志,我收到了以下错误:
Start: {} -> home{}
Error: {} -> home{} ReferenceError: $window is not defined {stack: "ReferenceError: $window is not defined↵ at a (h…pm/planitmoney/claw/dist/js/bower.min.js:815:112)", message: "$window is not defined"}
bower.min.js文件只是有角度的,后跟UI路由器..我要做更多的检查。再次感谢。
答案 0 :(得分:2)
再次感谢创建Plunkr的Chris T :http://plnkr.co/edit/aeEt4ddUYMM3xRi8M38T?p=preview 这有助于解决问题。
我将他在那里的控制台日志复制到我的应用程序中:
// Adds state change hooks; logs to console.
app.run(function($rootScope, $state) {
$rootScope.$state = $state;
function message(to, toP, from, fromP) { return from.name + angular.toJson(fromP) + " -> " + to.name + angular.toJson(toP); }
$rootScope.$on("$stateChangeStart", function(evt, to, toP, from, fromP) { console.log("Start: " + message(to, toP, from, fromP)); });
$rootScope.$on("$stateChangeSuccess", function(evt, to, toP, from, fromP) { console.log("Success: " + message(to, toP, from, fromP)); });
$rootScope.$on("$stateChangeError", function(evt, to, toP, from, fromP, err) { console.log("Error: " + message(to, toP, from, fromP), err); });
});
我立即注意到错误:
Start: {} -> home{}
Error: {} -> home{} ReferenceError: $window is not defined {stack: "ReferenceError: $window is not defined↵ at a (h…pm/planitmoney/claw/dist/js/bower.min.js:815:112)", message: "$window is not defined"}
深入挖掘我将错误追溯到实际抛出的错误,并在几分钟后修复。
我试图解决的服务也调用了它自己的一些依赖项。我不知道其中一个服务中缺少$ window注入。
错误未显示在控制台中 我想这可能是因为它被访问的独特方式(使用ui-routers解析)或者我在应用程序中使用Raven将它扔到某个我没看到的地方。
我希望这可以帮助其他人找到问题的根源。
再次感谢大家。
答案 1 :(得分:0)
我们有一个类似的设置,可以检查localStorage是否有令牌并解析了这个承诺。
检查以下示例:
var requireUser = { User: [ "$location", "$rootScope", "$q", "API", "Session",
function ( $location, $rootScope, $q, API, Session )
{
var deferred = $q.defer();
if( Session.get.authToken() )
{
if( Session.get.user() )
{
deferred.resolve( $rootScope.user );
}
else
{
$location.path( "/login" );
}
}
else
{
deferred.reject( "No user token" );
$location.path( "/login" );
}
return deferred.promise;
} ] };
$routeProvider
.when( "/users", { templateUrl: "/build/templates/users.html", controller: "UsersCtrl", resolve: requireUser, active: "users" } )