Today we will look into AngularJS Routing example using ngRoute module and $routeProvider. Earlier we looked into AngularJS Modules and AngularJS Controllers.
Routing in AngularJS is one of the core feature. In this AngularJS routing example, we will build a small single page application with multiple views to show you how routing in AngularJS works.
AngularJS ngRoute module provides routing, deep linking services and directives for angular applications. We have to download angular-route.js
script that contains the ngRoute module from AngularJS official website to use the routing feature. You can also use the CDN in your application to include this file. In this tutorial, We are going to use the Google CDN. https://ajax.googleapis.com/ajax/libs/angularjs/1.2.28//angular-route.min.js
If you are bundling this file into your application, then you can add it to your page with below code.
<script src="angular-route.js">
If you want to include it from Google CDN, then use below code.
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.28//angular-route.min.js"></script>
Then load the ngRoute module in your AngularJS application by adding it as a dependent module as shown below.
angular.module('appName', ['ngRoute']);
ngView directive is used to display the HTML templates or views in the specified routes. Every time the current route changes, the included view changes with it according to the configuration of the $route service.
$routeProvider is used to configure the routes. We use the ngRoute config() to configure the $routeProvider. The config()
takes a function which takes the $routeProvider
as parameter and the routing configuration goes inside the function. $routeProvider has a simple API, accepting either the when()
or otherwise()
method.
The following syntax is used to configure the routes in AngularJS.
var app = angular.module("appName", ['ngRoute']);
app.config(function($routeProvider) {
$routeProvider
.when('/view1', {
templateUrl: 'view1.html',
controller: 'FirstController'
})
.when('/view2', {
templateUrl: 'view2.html',
controller: 'SecondController'
})
.otherwise({
redirectTo: '/view1'
});
});
when()
method takes a pathand a route as parameters. path is a part of the URL after the # symbol. route contains two properties - templateUrl
and controller
. templateUrl property defines which HTML template AngularJS should load and display inside the div with the ngView
directive. controller property defines which controllers should be used with the HTML template. When the application is loaded, path is matched against the part of the URL after the # symbol. If no route paths matches the given URL the browser will be redirected to the path specified in the otherwise() function.
Now let’s go through a simple example to understand the AngularJS rounting. At first, we will define a module, some routes, create controllers and create multiple views. Finally, we will create the shell page of our application to hold the multiple views.
mainApp
and load ngRoute
as a dependent module.$routeProvider
.StudentController
StudentController
is initialized with an array of students and a message. We will be showing the message in the home page and the students list in viewStudents page.main.js
main.js
var mainApp = angular.module("mainApp", ['ngRoute']);
mainApp.config(function($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: 'home.html',
controller: 'StudentController'
})
.when('/viewStudents', {
templateUrl: 'viewStudents.html',
controller: 'StudentController'
})
.otherwise({
redirectTo: '/home'
});
});
mainApp.controller('StudentController', function($scope) {
$scope.students = [
{name: 'Mark Waugh', city:'New York'},
{name: 'Steve Jonathan', city:'London'},
{name: 'John Marcus', city:'Paris'}
];
$scope.message = "Click on the hyper link to view the students list.";
});
For example, if the URL is like https://www.journaldev.com/index.html#/home, The URL part after the # matches /home
, it will load home.html
page and if it matches /viewStudents
then it will load viewStudents.html
in to the shell page. If nothing matches then it will go in otherwise condition and page will be redirected to home.html
. Now we can create our views and save as home.html
and viewStudents.html
files. home.html
<div class="container">
<h2> Welcome </h2>
<p>{{message}}</p>
<a href="#/viewStudents"> View Students List</a>
</div>
This is the default page of our application. In this view, we just print out the message, which we have already initialized in the StudentController. You can also see a link to the viewStudents
page. viewStudents.html
<div class="container">
<h2> View Students </h2>
Search:
<br/>
<input type="text" ng-model="name" />
<br/>
<ul>
<li ng-repeat="student in students | filter:name">{{student.name}} , {{student.city}}</li>
</ul>
<a href="#/home"> Back</a>
</div>
In the above view, you can see a list of students with a search option. Finally, follow below steps to complete our AngularJS routing example application.
ng-app
auto-bootstraps our application mainAppngView
directive is the placeholder of the views - home.html
and viewStudents.html
angular.min.js
and angular-route.min.js
main.js
which we have created in the earlier steps.index.html
index.html
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="utf-8">
<title>AngularJS Routing</title>
</head>
<body>
<div ng-app="mainApp">
<ng-view></ng-view>
</div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.28/angular.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.28//angular-route.min.js"></script>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
That’s all for our AngularJS Routing example. Our application is ready to run.
index.html
from your browserThanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.
the above code not working in IE 11 and chrome-41
- Ankur
Great bhai this one i want thanks
- sanjeev
Hi, View Students List, how can i make above code in button (i.e) above code i want to write in button. can you please help me in getting that
- laxman
how can i implement using button , it is showing illegal character . can you please tell me it is quite urgent.
- laxman
it is a good tutorial, i learnt angularJS. thank you to this author.
- kumaresan
Nice article
- Vasudha Desai
very good article, one doubt, in the same exampe, how would make for to load in a div, other html file in home.html?, when i access index.html, directly home.html would have a div, that would loaded with other hmtl file.
- Javier
When I run this through eclipse, run on browser. This does not show any response. Blank page occurs. It appends #/home in output url but view is blank. What can be the probable issue. Other Tutorial on AngularJS pages loaded correctly. What can be the issue?
- Vibhav
As discussed earlier also in comments, this is working only on mozilla due to security issue.
- Vibhav
This is very nice, sen of the ng-views - so simply presented. Thanks a lot, Very nice keep it up. - Ravi
- Ravi