提供给 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.templateUrl
或 next.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*
事件将提供另外两个参数。那些是 newState
和 oldState
.
总而言之,监听 $route*
事件可能是调试您在 $routeProvider
中提供的对象和定义的最佳选择。但是,如果您需要查看所有 url 的尝试,则需要侦听 $locationChange*
事件。
我是 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.templateUrl
或 next.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*
事件将提供另外两个参数。那些是 newState
和 oldState
.
总而言之,监听 $route*
事件可能是调试您在 $routeProvider
中提供的对象和定义的最佳选择。但是,如果您需要查看所有 url 的尝试,则需要侦听 $locationChange*
事件。