调试路由提供给routeProvider

时间:2015-01-18 21:31:36

标签: angularjs angularjs-routing

我是AngularJS的新手,我正在尝试调试我的一些路线,但我不知道如何显示/查看传递给routeprovider的路线。

例如,如果我的当前路由设置如下;

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”评估的路线。

1 个答案:

答案 0 :(得分:19)

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

  • $routeChangeStart
  • $routeChangeSuccess
  • $routeChangeError
  • $routeUpdate

(我鼓励阅读链接提供的文档,以了解各自的说明。)

此时,您可以在其中一个控制器或指令的$scope上侦听这些事件中的一个或全部,或者将$rootScope注入angular.module().run()功能或其他服务/工厂。

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

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

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

因此,您可以收听$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中提供的对象和定义的最佳选择。但是,如果您需要查看所有正在尝试的网址,则需要收听$locationChange*个事件。

目前截至AngularJS 1.3.9