【发布时间】:2019-10-11 06:19:23
【问题描述】:
我试图阻止基于 HTTP GET 到授权端点的结果在 AngularJS 中导航(这与我的 Spring Security 架构相关,但这对这个问题并不重要)。
我已将以下内容附加到附加到我的顶级模块的 run() 块中:
$rootScope.$on("$locationChangeStart", function(event, newUrl, oldUrl) {
var path = $location.path();
$http.get('/svc/authorize/view?urlPath=' + path).then(response => {
if (response.data.result === "NOT_AUTHORIZED") {
event.preventDefault();
console.log("Prevented unauthorized location change");
$ui.showError("Unable to Navigate to " + newUrl);
}
});
});
(注意:$ui 是我们的服务,不是 AngularJS 或第三方工具)。
不幸的是,由于异步 $http.get(),页面在调用完成之前加载。
如果有帮助,以下是我们的路线定义示例:
$routeProvider.when('/problem', {
templateUrl: '/app/management/problem/problem.tmpl.html',
controller: 'problemCtrl'
});
谁能帮帮我?我希望我在处理异步调用时犯了一个愚蠢的错误。
【问题讨论】:
-
通常在路由中使用
resolve函数来防止未经授权的路由加载。