我是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”评估的路线。
答案 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.templateUrl
或next.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*
事件将提供另外两个参数。这些是newState
和oldState
。
总之,听取$route*
事件可能是您调试$routeProvider
中提供的对象和定义的最佳选择。但是,如果您需要查看所有正在尝试的网址,则需要收听$locationChange*
个事件。
目前截至AngularJS 1.3.9