提供给 routeProvider 的调试路由

Debug route provided to routeProvider

我是 AngularJS 的新手,正在尝试调试我的一些路由,但我不知道如何 display/view 将路由传递给路由提供商。

比如我现在的路由设置如下;

reportFormsApp.config(function ($routeProvider) {
    $routeProvider
        .when("/Reporting", { templateUrl: "ReportForm/rfTemplate.html", controller: "rfController" })
        .when("/Dashboard", { templateUrl: "DashboardForm/dfTemplate.html", controller: "dfController" })
        .when("/Analysis",  { templateUrl: "AnalysisForm/afTemplate.html", controller: "afController" })
        .otherwise({ redirectTo: "/Reporting" })
});

调试时我想破解代码并在控制台日志中输入类似;

$routeProvider.path

显示由“.when”评估的路线。

您可以监听 $route service 发出的多个事件。这些事件是:

  • $routeChangeStart
  • $routeChangeSuccess
  • $routeChangeError
  • 并且,$routeUpdate

(我鼓励阅读 link 提供的文档以了解每个文档的说明。)

此时您可以在您的控制器或指令之一的 $scope 上监听一个或所有这些事件,或者通过将 $rootScope 注入您的 angular.module().run() 函数或另一个 service/factory.

例如,作为您提供的代码的附录:

reportFormsApp.config(function ($routeProvider) {
  $routeProvider
    .when("/Reporting", { templateUrl: "ReportForm/rfTemplate.html", controller: "rfController" })
    .when("/Dashboard", { templateUrl: "DashboardForm/dfTemplate.html", controller: "dfController" })
    .when("/Analysis",  { templateUrl: "AnalysisForm/afTemplate.html", controller: "afController" })
    .otherwise({ redirectTo: "/Reporting" })
});

reportFormsApp.run([
  '$rootScope',
  function($rootScope) {
    // see what's going on when the route tries to change
    $rootScope.$on('$routeChangeStart', function(event, next, current) {
      // next is an object that is the route that we are starting to go to
      // current is an object that is the route where we are currently
      var currentPath = current.originalPath;
      var nextPath = next.originalPath;

      console.log('Starting to leave %s to go to %s', currentPath, nextPath);
    });
  }
]);

您还可以访问其他 $routeProvider 对象,例如 current.templateUrlnext.controller

关于重定向的注意事项: 使用 $route service 事件有一个对象例外,即存在重定向时。在这种情况下,next.originalPath 将是未定义的,因为您将拥有的只是您在 otherwise() 中定义的 redirectTo 属性。您永远不会看到用户试图访问的路由。

因此,您可以收听 $location service's $locationChangeStart$locationChangeSuccess 事件:

reportFormsApp.run([
  '$rootScope',
  function($rootScope) {
    // see what's going on when the route tries to change
    $rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl) {
      // both newUrl and oldUrl are strings
      console.log('Starting to leave %s to go to %s', oldUrl, newUrl);
    });
  }
]);

如果您使用 HTML5Mode,那么 $locationChange* 事件将提供另外两个参数。那些是 newStateoldState.

总而言之,监听 $route* 事件可能是调试您在 $routeProvider 中提供的对象和定义的最佳选择。但是,如果您需要查看所有 url 的尝试,则需要侦听 $locationChange* 事件。

当前 AngularJS 1.3.9