gpt4 book ai didi

javascript - Angular : pass data when doing a $location. 路径()

转载 作者:行者123 更新时间:2023-11-29 10:45:05 26 4
gpt4 key购买 nike

我现在有两个观点。

  • 登录
  • 主要

现在我登录并将我的路径更改为 /main,这工作正常。当我未登录并尝试访问 /main 时,我的 Web 服务返回 "Access denied for user anonymous" 然后我将它们转发给 / 这是我的登录 View 。我怎样才能传递一些东西让我的 LoginController 知道它们是从 /main 转发来提醒他们先登录的?

LoginController.js

VforumJS.controller('LoginController', function($scope, $location, $routeParams, LoginModel)
{
$scope.email = "";
$scope.password = "";
$scope.fetching = false;
$scope.error = null;

$scope.login = function()
{
$scope.error = null;
$scope.fetching = true;
LoginModel.login($scope.email, $scope.password);
}

$scope.$on('LoginComplete', function(event, args)
{
log('login complete: ' + args.result);
$scope.fetching = false;
if (args.result == "success")
{
$location.path('/main');
}
else
{
$scope.error = args.result;
}
});
});

MainController.js

VforumJS.controller('MainController', function($scope, $location, $routeParams, MainModel)
{
$scope.currentTitle = '-1';
$scope.presentationData = MainModel.getPresentations();

$scope.$on('PresentationsLoaded', function(event, args)
{
log(args.result);
if (args.result != "Access denied for user anonymous")
{
//-- Parse preso data
$scope.presentationData = args.result;
}
else
{
//-- Need to login first, route them back to login screen
$location.path("/");
}
});
});

最佳答案

您可以在 MainController 中使用 $location.search() 将查询字符串传递给 LoginController

在你的 MainController 中:

    if (args.result != "Access denied for user anonymous")
{
//-- Parse preso data
$scope.presentationData = args.result;
}
else
{
//-- Need to login first, route them back to login screen
$location.search({ redirectFrom: $location.path() });
$location.path("/");
}

然后在您的 LoginController 中,为简洁起见缩短了:

VforumJS.controller('LoginController', function($scope, $location, $routeParams, LoginModel)
{
var queryString = $location.search();

$scope.$on('LoginComplete', function(event, args)
{
log('login complete: ' + args.result);
$scope.fetching = false;
if (args.result == "success")
{
if (queryString && queryString.redirectFrom) {
$location.path(queryString.redirectFrom);
} else {
$location.path('/somedefaultlocation');
}
}
else
{
$scope.error = args.result;
}
});
});

或者,您可以使用共享服务,甚至可以使用您的 LoginModel 来设置来自 MainController 的参数,以指示重定向来自它。

更新更好的是,使用 $httpProvider.interceptors 注册响应拦截器,然后使用上述相同的 $location.search() 技术重定向到登录屏幕验证失败。这种方法非常理想,因为您的 Controller 随后将清除身份验证逻辑。

关于javascript - Angular : pass data when doing a $location. 路径(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005098/

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