角度 ui 路由器解析服务停止路由更改
Angular ui-router resolve service halting route change
允许交换机进入该状态之前,尝试让ui路由器解析身份验证服务。
不幸的是,它继续逃避我,每当我注入不属于 Angular 的服务时,都会悬挂角度。
我知道我无法将服务注入 .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"
});
}]);
所以控制器从来没有真正被实例化......控制台中没有错误。
如果我输入任何随机字符串作为服务名称,也会发生同样的情况......所以我最好的猜测是它找不到它?但是该应用程序的所有其他区域都可以...
我花了一段时间研究这个,我很确定我应该能够以某种方式完成这项工作。
任何帮助将不胜感激。
授予。
编辑
感谢克里斯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路由器。我要做更多的检查。再次感谢。
再次感谢创建 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 把它扔到了我没有看到的地方。
我希望这有助于其他人深入了解任何问题。
再次感谢大家。
我们有一个类似的设置,可以检查本地存储中的令牌并解析承诺。
检查以下示例:
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" } )
- 如何在从缓存加载路由后强制服务工作者从网络请求路由
- 如何使用路由提供程序在应用中调用模式服务
- 使用路由的未定义服务控制器
- 我可以在 angle js asp.net mvc 中调用控制器中的路由提供程序服务吗?
- 如何在刷新时将持久数据保存在角度路由服务中
- 使用角度 ui 路由器获取服务中的路由参数
- 角度 ui 路由器解析服务停止路由更改
- 为什么在重新加载路由时重新初始化 AngularJS 服务
- 从外部web服务获取图像并将其传递到另一个express js路由
- 如何在AgularJS服务中添加到$resource的路由
- 使用Angularjs服务的配置在.run()中生成路由
- 如何在angular.js中分别编写控制器、服务、路由和模块
- 分离角度路由、控制器和服务
- Node.js REST API服务中使用的基于资源的路由模块,或用于此类服务的其他有用模块
- 从Express服务的客户端React应用上的一致url路由
- 在谷歌地图API 3中清除方向服务的路由失败
- 为什么AngularJS的服务在从一个路由导航到另一个路由时没有定义?
- 检测Angular服务中的路由变化
- 如何将服务变量定义为当前路由
- 在express.js中使用路由服务静态文件