gpt4 book ai didi

javascript - Angular ui-router解决服务暂停路由更改

转载 作者:行者123 更新时间:2023-11-30 17:09:30 25 4
gpt4 key购买 nike

在允许切换到该状态之前尝试让 ui-router 解析身份验证服务。

不幸的是,每当我注入(inject)不属于 Angular 服务时,它都会继续躲避我, Angular 挂起。

我知道我不能将服务注入(inject)到 .config 中,但我应该能够在加载 Controller 之前做到这一点?

这是代码的简化版本:

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"
});
}]);

所以 Controller 实际上从未被实例化......控制台中没有错误。

如果我输入任何随机字符串作为服务名称,也会发生同样的情况……所以我最好的猜测是它找不到它?但是应用程序的所有其他区域都可以...

我花了一段时间研究这个,我很确定我应该能够以某种方式完成它。

如有任何帮助,我们将不胜感激。

授予。

编辑

感谢 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 文件只是 Angular ,然后是 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 注入(inject)。

错误没有显示在控制台中我想这可能是因为访问它的独特方式(使用 ui-routers 解析)或者我在应用程序中使用 Raven 把它扔到了我没有看到的地方。

我希望这可以帮助其他人弄清任何问题的根源。

再次感谢大家。

关于javascript - Angular ui-router解决服务暂停路由更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27299471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com