gpt4 book ai didi

angularjs - 来自 angularjs 路由中 $routeChangeStart 路由参数的 URL

转载 作者:行者123 更新时间:2023-12-03 08:01:02 31 4
gpt4 key购买 nike

怎么可能得到 URL $routeChangeStart 中路由参数的哈希片段.

$scope.$on('$routeChangeStart', function (event, next, current) {
// trying to get the url hash fragment from <next> param here
// e.g. to_url_function(next) -> '/my_path/1'
});

接收 URL hash片段会很容易使用 $locationChangeStart但这不是我的选择。

最佳答案

dasboe:我想我正在回答你的问题。

我在 $routeChangeStart 事件处理程序中有一个带有身份验证/授权检查的应用程序。如果未通过身份验证,我会向用户显示模式登录页面。我希望成功登录以将它们发送到原来的目的地($routeChangeStart 的优点在于它会在成功登录后再次运行并检查授权)。我将从下一个构建的路径保存在注入(inject)模式登录 Controller 的用户 session 服务中。

这是事件处理程序

//before each route change, check if the user is logged in
//and authorized to move onto the next route
$rootScope.$on('$routeChangeStart', function (event, next, prev) {
if (next !== undefined) {
if ('data' in next) {
if ('authorizedRoles' in next.data) {
var authorizedRoles = next.data.authorizedRoles;
if (!SessionService.isAuthorized(authorizedRoles)) {
event.preventDefault();
SessionService.setRedirectOnLogin(BuildPathFromRoute(next));
if (SessionService.isLoggedIn()) {
// user is not allowed
$rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
} else {
// user is not logged in
$rootScope.$broadcast(AUTH_EVENTS.notAuthenticated);
}
}
}
}
}
});

这是从下一个对象构建路径的函数
function BuildPathFromRoute(routeObj)
{
var path = routeObj.$$route.originalPath;
for (var property in routeObj.pathParams)
{
if (routeObj.pathParams.hasOwnProperty(property))
{
var regEx = new RegExp(":" + property, "gi");
path = path.replace(regEx, routeObj.pathParams[property].toString());
}
}
return path;
}

备注:
  • 我不热衷于我的 $$route 依赖,但我找不到任何其他方法来做到这一点。也许我错过了一些更容易的事情。从长远来看,我可能会招来麻烦。
  • preventDefault() 不适用于 AngularJS 1.3.7 之前的版本(参见 event.preventDefault() not working for routeChangeStart in angularjs app )。
  • 标准警告:这都是客户端并且容易被滥用。确保身份验证/授权发生在服务器端。
  • 下一个 Route 对象(来自事件处理程序)也有一个 params 属性。我不确定我是否应该像使用 pathParams 一样遍历它的属性。
  • 关于angularjs - 来自 angularjs 路由中 $routeChangeStart 路由参数的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31434246/

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