Angularjs $state.go on抽象状态的一个内部函数

Angularjs $state.go on抽象状态的一个内部函数,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有以下UI路由器配置,包括一个登录页(/login)、一个作为我所有管理页(/admin)父级的抽象页和一个从抽象页(/admin/list)扩展的列表页: 我想实现一个逻辑,该逻辑将验证用户在访问/admin/*页面时是否经过身份验证。为了做到这一点,我在抽象状态中添加了一个onEnter函数,以便使用$state.go('login')。但这不起作用。我该怎么做?有没有更好的方法来验证UI路由器内部的身份验证?在这种情况下,我认为最好使用resolve而不是onEnter 主要是因为您希望

我有以下UI路由器配置,包括一个登录页(/login)、一个作为我所有管理页(/admin)父级的抽象页和一个从抽象页(/admin/list)扩展的列表页:


我想实现一个逻辑,该逻辑将验证用户在访问/admin/*页面时是否经过身份验证。为了做到这一点,我在抽象状态中添加了一个onEnter函数,以便使用$state.go('login')。但这不起作用。我该怎么做?有没有更好的方法来验证UI路由器内部的身份验证?

在这种情况下,我认为最好使用
resolve
而不是
onEnter

主要是因为您希望在导航之前检查用户是否经过身份验证。如果块内的对象未解析,则传递到状态的控制器将不会实例化

.state('admin', {
  abstract: true,
  url: '/admin',
  templateUrl: '/tmpl/templateAdmin.html',
  resolve: {
    currentUser: function (authService) {
      return authService.getUser();
    }
  }
}
根状态将尝试解析嵌套在其中的所有子视图的用户

以下是有关嵌套状态和继承的已解析依赖项的文档链接:


谢谢你的回复,但它不起作用。我添加了以下内容:.state('admin',{abstract:true,url:'/admin',templateUrl:'/tmpl/templateAdmin.html',resolve:function(){console.log(“enter resolve function”);},oneter:function(){console.log(“enter admin abstract”);/$state.target('login'))})和onEnter打印输出,但解析不打印输出。
.state('admin', {
  abstract: true,
  url: '/admin',
  templateUrl: '/tmpl/templateAdmin.html',
  resolve: {
    currentUser: function (authService) {
      return authService.getUser();
    }
  }
}