[英]Proper way to pause routing in angular
我有一个具有访客功能的角度应用程序。 这意味着我将为所有未授权用户在后台创建访客帐户。 而且我需要暂停路由,直到创建来宾帐户,并且我可以为所有其他请求指定身份验证令牌。 目前,我正在通过向所有路线添加resolve参数来做到这一点。
.config(function ($routeProvider) {
var originalWhen = $routeProvider.when;
$routeProvider.when = function (path, route) {
if (path && path.indexOf('sign') === -1) {
route.resolve = route.resolve || {};
route.resolve.userSync = ['User', function (User) {
return User.isSynchronized.promise;
}];
}
return originalWhen.call(this, path, route);
};
});
但这似乎不是很好的解决方案。 谁能给我建议,以正确的方式如何做?
您可以监听rootScope locationChangeStart事件
.run(['$rootScope', 'User', function ($rootScope, User) {
$rootScope.userLoggedIn = false;
var preventLocationChangeUnregister = $rootScope.$on('$locationChangeStart', function (event, newUrl, oldUrl) {
if ($rootScope.userLoggedIn === false && newUrl.indexOf('sign') === -1) {
event.preventDefault(); // This prevents the navigation from happening
}
});
User.isSynchronized.promise.then(function () {
preventLocationChangeUnregister(); //By calling this your event listener for the $locationChangeStart event will be unsubscribed
//$rootScope.userLoggedIn = true; //Or you can set userLoggedIn to true without unregistering event
});
}])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.