读取属性从角度$ routeProvider错误解决

时间:2017-10-16 19:56:29

标签: angularjs angular-routing route-provider

我正在尝试使用Angular路由限制访问公共目录中的某些页面。

.when('/adminprofile', {
    templateUrl: '../partials/adminprofile.html',
    access: {restricted: true}
  })

我正在尝试阅读我认为属于我声明的名为access的属性,称为访问

myApp.run(function ($rootScope, $location, $route, AuthService) {
$rootScope.$on('$routeChangeStart',
  function (event, next, current) {
    AuthService.getUserStatus()
    .then(function(){
      if (next.access.restricted && !AuthService.isLoggedIn()){
        $location.path('/login');
        $route.reload();
      }
    });
});
 });

但我得到的是这个错误:

  

TypeError:next.access未定义

我如何阅读该属性或如何以更好的方式实现这一目标?,谢谢

编辑:

根据建议,我已经更改了代码,它看起来如下:

var myApp = angular.module('myApp', ['ngRoute']);

myApp.config(function ($routeProvider, $locationProvider) {
$routeProvider
   .when('/', {
    templateUrl: '../partials/home.html',
    resolve: { 
      access: false
    }
  })
  .when('/home', {
    templateUrl: '../partials/home.html',
    resolve: { 
      access: false
    }
  })
  .when('/login', {
    templateUrl: '../partials/login.html',
    controller: 'loginController',
    resolve: { 
      access: false
    }
  })
  .when('/logout', {
    controller: 'logoutController',
    resolve: { 
      access: false
    }
  })
  .when('/register', {
    templateUrl: '../partials/register.html',
    controller: 'registerController',
    resolve: { 
      access: false
    }
  })
  .when('/adminprofile', {
    templateUrl: '../partials/adminprofile.html',
    resolve: { 
      access: true
    }
  })
  .otherwise({
    redirectTo: '/'

  });

});

我有我的跑步功能:

myApp.run(function ($rootScope, $location, $route, AuthService) {
debugger;
$rootScope.$on('$routeChangeStart',
  function (event, next, current) {
    AuthService.getUserStatus()
    .then(function(){
      if (next.resolve.access && !AuthService.isLoggedIn()){
        $location.path('/login');
        $route.reload();
      } else{
        $location.path($route.current.originalPath);
      }
    });
});
});

现在我可以看到访问的价值:

  

next.resolve.access

但是没有显示任何内容,我在调试中运行并且可以看到实际上是通过$ routeChangeStart回调,为什么你呢? helppppp!

1 个答案:

答案 0 :(得分:0)

好的fellas,已经完成,这是正确的方法:

var myApp = angular.module('myApp', ['ngRoute']);

myApp.config(function ($routeProvider, $locationProvider) {
$routeProvider
   .when('/', {
    templateUrl: '../partials/home.html',
    resolve:  { 
      access: function() {
          return false;
      }
    }
  })
  .when('/home', {
    templateUrl: '../partials/home.html',
    resolve:  { 
      access: function() {
          return false;
      }
    }
  })
  .when('/login', {
    templateUrl: '../partials/login.html',
    controller: 'loginController',
    resolve:  { 
      access: function() {
          return false;
      }
    }
  })
  .when('/logout', {
    controller: 'logoutController',
    resolve:  { 
      access: function() {
          return false;
      }
    }
  })
  .when('/register', {
    templateUrl: '../partials/register.html',
    controller: 'registerController',
    resolve:  { 
      access: function() {
          return false;
      }
    }
  })
  .when('/adminprofile', {
    templateUrl: '../partials/adminprofile.html',
    resolve:  { 
      access: function() {
          return true;
      }
    }
  })
  .otherwise({
    redirectTo: '/'

  });

});

myApp.run(function ($rootScope, $location, $route, AuthService) {
debugger;
$rootScope.$on('$routeChangeStart',
  function (event, next, current) {
    AuthService.getUserStatus()
    .then(function(){
      if (next.resolve.access && !AuthService.isLoggedIn()){
        $location.path('/login');
        $route.reload();
      }
    });
});
});

解决必须是一个功能

  

Resolve将在获得价值后立即打开您的路线并使用已解决的变量(可以注入控制器)(立即或当退回的承诺将被解决时)

由于它没有返回值,路由器似乎卡在等待值解析。