gpt4 book ai didi

angularjs - 取消路由并重定向到其他路由而不在AngularJS中显示原始内容

转载 作者:行者123 更新时间:2023-12-02 02:43:47 24 4
gpt4 key购买 nike

我想检查一个 http 服务以查看用户是否经过身份验证,以及它是否有权查看 AngularJS 1.2.0rc1 中的某个页面( Controller )。

我有这种情况:
用户A想访问http://www.example.com/content .现在,当他或她未经过身份验证时,不应访问此内容。如果用户未通过身份验证,则应将其重定向到 http://www.example.com/login .

现在我设法做到了,但我简要地看到了内容页面的呈现 html。我不想要这个。如何在不呈现内容页面的情况下重定向到登录页面?

我这样注册我的路线:

$routeProvider.when('/login', route.resolve('Login', false))
$routeProvider.when('/content', route.resolve('Content', true))

现在我已经尝试过了:
$rootScope.$on('$routeChangeStart', function (event, route) {
if (route.requiresLogin) {
$http.get('/api/user/loggedin/').then(function (response) {
if (response !== 'true') {
$location.path('/login');
}
});
}
});

哪个有效,但我仍然看到另一个页面(内容)的html内容在闪烁。

我读过 here您还可以尝试在解析路由时更改解析功能:
    var resolve = function (baseName, requiresLogin) {
var routeDef = {};
var dependencies = [routeConfig.getControllersDirectory() + baseName + 'Controller.js'];

routeDef.templateUrl = routeConfig.getViewsDirectory() + baseName.toLowerCase() + '.html';
routeDef.controller = baseName + 'Controller';
routeDef.requiresLogin = requiresLogin;
routeDef.resolve = {
load: ['$q', '$rootScope', '$http', '$location', function ($q, $rootScope, $http, $location) {
console.log(requiresLogin);
if (requiresLogin) {
return checkLoggedIn($q, $rootScope, $http, $location);
} else {
return resolveDependencies($q, $rootScope, dependencies);
}
}]
};

return routeDef;
}

但是这里的页面也简单地显示。

希望你能帮助我。

最佳答案

第一个答案应该有效,但要使用 $q我会使用 defer.resolve()defer.reject("rejection_reason")然后我会听 $routeChangeError在顶级 Controller 中,该 Controller 绑定(bind)到 routeProvider 管理的 ng-view 之外的元素。

因此,在您的 HTML 中,类似于:

<body ng-app="app" ng-controller="DocumentCtrl">
<div ng-view>
</div>
</body>

然后你的路线将被定义为:
when('/home', {
templateUrl: templateUrl blah,
controller: baseName + 'Controller',
resolve: {
load: function($q, MY_USER_SERVICE){
var defer = $q.defer();
if(~MY USER LOGGED_IN LOGIC RETURNS TRUE~){
defer.resolve();
} else {
defer.reject("not_logged_in");
}
return defer.promise;

}
}
}).

然后我的 DocumentCtrl Controller 将包含:
$scope.$on("$routeChangeError", function(evt,current,previous,rejection){
if(rejection == "not_logged_in"){
//DO SOMETHING
} else {
//OR DO SOMETHING ELSE
}
});

我正在运行上述程序,并且没有任何不应加载的 View 的闪烁。

关于angularjs - 取消路由并重定向到其他路由而不在AngularJS中显示原始内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18256106/

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