1

我已经使用 yeoman 生成了一个 Angular 项目。

我有一个带有 ng-view 的 index.html,我正在通过相应的控制器显示 claim.html、claim-details.html,它们在 ng-view 中正确呈现。

现在,我有一个带有特定 css 的 signin.html 页面,它是一个完整的结构化 HTML 页面。我想在用户未登录时显示这一点。一旦他通过身份验证,他应该被重定向到上述视图。我该如何配置?

我正在关注路由

 app.config(function ($routeProvider) {
 $routeProvider
  .when('/', {
    templateUrl: 'views/claims.html',
    controller: 'ClaimsCtrl'
  })
  .when('/signin', {
    templateUrl: 'views/signin.html',
    controller: 'SigninCtrl'
  })
  .when('/dashboard', {
    templateUrl: 'views/dashboard.html',
    controller: 'DashboardCtrl'
  })
  .otherwise({
    redirectTo: '/'
  });
 });

是否可以提及,哪个 .html 应该作为 ng-view 的一部分呈现,哪个应该是独立的 html 文件?即我希望claims.html 和dashboard.html 成为ng-view 的一部分,但signin.html 应该是独立的

4

2 回答 2

0

在 AngularJs 项目中,我简单地通过在每个控制器上注入一个身份验证服务来实现这一点。在此服务中,我检查用户是否未通过身份验证或没有足够的权限,如果为真那么我只是这样做$location.url("/login");位置服务文档

于 2014-08-13T08:02:22.707 回答
0

一种方法是使用ui-router提供的 '$stateChangeStart' 事件, 该事件在转换开始时触发。如果他没有登录,您可以注入处理您的用户的服务并重定向它。这看起来像这样:

app.run(['$state', 'Session' 函数($state, Session){

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, from, fromParams){
    if (toState.name !== "login" && !Session.is_connected()) {
        $state.go("login");
        event.preventDefault();
    }

});

}]);

此外,您还可以保存他尝试访问的最后一个状态,并在他登录后将他重定向到该状态。

于 2014-08-13T07:47:15.093 回答