【问题标题】:Proper way to pause routing in angular以角度暂停路由的正确方法
【发布时间】:2014-12-26 15:09:40
【问题描述】:

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

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

但它看起来不是很好的解决方案。谁能给我建议如何以正确的方式做到这一点?

【问题讨论】:

    标签: javascript angularjs angularjs-routing


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。但是在这种情况下,创建访客帐户后,我将如何继续执行路由?
    猜你喜欢
    • 2021-12-19
    • 2012-07-18
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2017-03-25
    • 2017-10-20
    相关资源
    最近更新 更多