gpt4 book ai didi

angularjs - Angular ui 路由器 : How to defer rendering the template until authorization is complete?

转载 作者:行者123 更新时间:2023-12-04 14:27:44 26 4
gpt4 key购买 nike

我的 ui-router 配置是这样的:

$stateProvider
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'sidemenu/sidemenu.html',
controller: 'SideMenuCtrl'
})
.state('login', {
url: '/login',
templateUrl: 'login/login.html',
controller: 'LoginCtrl'
})
.state('app.dashboard', {
url: '/dashboard',
views: {
menuContent: {
templateUrl: 'dashboard/dashboard.html',
controller: 'DashboardCtrl'
}
}
})
[More states here]

$urlRouterProvider.otherwise('/app/dashboard');

当用户导航到 /app/dashboard我想检查他们是否获得授权,然后:
  • 重定向到 /login如果他们未经授权,或
  • 如果获得授权,则允许查看仪表板

  • 这似乎可以解决问题:(基于 this example )
    $rootScope.$on('$stateChangeSuccess', function(event) {
    var path = $location.path();

    if (path === '/login') {
    return;
    }

    // Halt state change from even starting
    event.preventDefault();

    Auth.getCurrentUser().then(function(currentUser) {
    if (currentUser === null) {
    $state.go('login');
    } else {
    // Continue with the update and state transition
    $urlRouter.sync();
    }
    });
    });

    此解决方案的唯一问题是,如果非授权用户导航到仪表板, 仪表板模板首先可见 .只有当授权响应返回时,它才会更改为登录模板。

    有没有办法在我们授权用户时不显示仪表板?

    我也试过改 $stateChangeSuccess$stateChangeStart ,但它并没有真正起作用(当时路由似乎完全被破坏了)。

    最佳答案

    使用解析块怎么样?

    .state('app.dashboard', {
    url: '/dashboard',
    views: {
    menuContent: {
    templateUrl: 'dashboard/dashboard.html',
    controller: 'DashboardCtrl',
    resolve: {
    login: function($q, Auth) {
    var deferred = $q.defer();
    Auth.getCurrentUser().then(function(currentUser) {
    if (currentUser == null) {
    deferred.reject();
    } else {
    deferred.resolve();
    }
    });
    return deferred.promise;
    }
    }
    }
    }
    })

    在 promise 解决之前不会发生状态更改,因此模板不应显示。拒绝 promise 将引发 $stateChangeError根据 this answer所以你需要处理那个错误并重定向到登录页面。

    关于angularjs - Angular ui 路由器 : How to defer rendering the template until authorization is complete?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24582700/

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