I am new to AngularJS and am attempting to debug some of my routes but I don't know how to display/view the route passed to the routeprovider.
For example if my current routing is set up as follows;
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" })
});
When debugging I want to break the code and in the console log enter something like;
$routeProvider.path
to display the route as it would be evaluated by the ".when".
Creating a Default Route in AngularJS The below syntax just simply means to redirect to a different page if any of the existing routes don't match. otherwise ({ redirectTo: 'page' }); Let's use the same example above and add a default route to our $routeProvider service. function($routeProvider){ $routeProvider.
We use $routeProvider to configure the routes. The config() takes a function that takes the $routeProvider as a parameter and the routing configuration goes inside the function. The $routeProvider is a simple API that accepts either when() or otherwise() method. We need to install the ngRoute module.
Using reload() method: Angular route service reload() method is used when we want just the current route to be reloaded instead of making our entire application reloading or refreshing.
The $on() method is an event handler, the event which will handle $routeChangeSuccess which gets triggered when route/view change is done.
You can listen to multiple events emitted by the $route service
. These events are:
$routeChangeStart
$routeChangeSuccess
$routeChangeError
$routeUpdate
(I would encourage reading the docs provided by the link for descriptions of each.)
At this point you can listen for one or all of these events on the $scope
of one of your controllers or directives, or by injecting $rootScope
into your angular.module().run()
function or another service/factory.
For example, as an addendum to your provided code:
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);
});
}
]);
You can also access the rest of your $routeProvider
objects as well such as current.templateUrl
or next.controller
.
Note concerning redirectTo:
There is one object exception to using the $route service
events and that is when there is a redirect. In this case, next.originalPath
will be undefined because all you will have is the redirectTo
property you defined in otherwise()
. You will never see the route that the user tried to access.
So, you can listen to the $location service's
$locationChangeStart
or $locationChangeSuccess
events:
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);
});
}
]);
If you use HTML5Mode then there will be two other arguments provided by the $locationChange*
events. Those are newState
and oldState
.
In conclusion, listening to the $route*
events will likely be your best bet for debugging objects and definitions you provide in your $routeProvider
. However, if you need to see all url's being attempted, the $locationChange*
events will need to be listened to.
Current as of AngularJS 1.3.9
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With