簡體   English   中英

正確的方法來暫停角形路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM