正确的方法来暂停角度的路由

时间:2014-12-26 15:09:40

标签: javascript angularjs angularjs-routing

我有一个带有访客功能的角度应用程序。这意味着我在后台为所有未经授权的用户创建了一个访客帐户。我需要暂停路由,直到创建来宾帐户,我可以为所有其他请求指定身份验证令牌。目前,我通过向所有路线添加解析参数来实现这一目标。

.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);
    };
});

但它看起来不是很好的解决方案。任何人都可以通过正确的方式给我建议吗?

1 个答案:

答案 0 :(得分:0)

您可以收听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
  });
}])