We are no longer accepting contributions to Documentation. Please see our post on meta.

AngularJS

Routing using ngRoute All Versions

0.9.0
0.9.1
0.9.2
0.9.3
0.9.4
0.9.5
0.9.6
0.9.7
0.9.9
0.9.10
0.9.11
0.9.12
0.9.13
0.9.14
0.9.15
0.9.16
0.9.17
0.9.18
0.9.19
0.10.0
0.10.1
0.10.2
0.10.3
0.10.4
0.10.5
0.10.6
1.0.0rc1
g3-v1.0.0rc1
g3-v1.0.0-rc2
v1.0.0rc2
v1.0.0rc3
v1.0.0rc4
v1.0.0rc5
v1.0.0rc6
v1.0.0rc7
v1.0.0rc8
v1.0.0rc9
v1.0.0rc10
v1.0.0rc11
v1.0.0rc12
1.0.0
1.0.1
1.0.2
1.1.0
1.0.3
1.1.1
1.0.4
1.1.2
1.0.5
1.1.3
1.0.6
1.1.4
1.0.7
1.1.5
1.2.0rc1
1.0.8
1.2.0-rc.2
1.2.0-rc.3
1.2.0
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
1.2.6
1.2.7
1.2.8
1.2.9
1.2.10
1.2.11
1.2.12
1.2.13
1.2.14
1.3.0-beta.1
1.3.0-beta.2
1.3.0-beta.3
1.2.15
1.3.0-beta.4
1.2.16
1.3.0-beta.5
1.3.0-beta.6
1.3.0-beta.7
1.3.0-beta.8
1.3.0-beta.9
1.3.0-beta.10
1.2.17
1.3.0-beta.11
1.2.18
1.3.0-beta.12
1.3.0-beta.13
1.2.19
1.3.0-beta.14
1.2.20
1.3.0-beta.15
1.3.0-beta.16
1.2.21
1.3.0-beta.17
1.2.22
1.3.0-beta.18
1.2.23
1.3.0-beta.19
1.3.0-rc.0
1.2.24
1.3.0-rc.1
1.2.25
1.3.0-rc.2
1.3.0-rc.3
1.3.0-rc.4
1.2.26
1.3.0-rc.5
1.3.0
1.3.1
1.3.2
1.3.3
1.2.27
1.3.4
1.3.5
1.3.6
1.3.7
1.2.28
1.3.8
1.4.0-beta.0
1.3.9
1.3.10
1.4.0-beta.1
1.3.11
1.4.0-beta.2
1.3.12
1.4.0-beta.3
1.3.13
1.4.0-beta.4
1.3.14
1.4.0-beta.5
1.3.15
1.4.0-beta.6
1.4.0-rc.0
1.4.0-rc.1
1.4.0-rc.2
1.4.0
1.3.16
1.4.1
1.3.17
1.4.2
1.4.3
1.4.4
1.3.18
1.4.5
1.3.19
1.4.6
1.5.0-beta.0
1.2.29
1.3.20
1.4.7
1.5.0-beta.1
1.5.0-beta.2
1.4.8
1.5.0-rc.0
1.5.0-rc.1
1.4.9
1.5.0-rc.2
1.5.0
1.4.10
1.5.1
1.5.2
1.5.3
1.5.4
1.5.5
1.4.11
1.5.6
1.4.12
1.5.7
1.2.30
1.5.8
1.2.31
1.4.13
1.2.32
1.6.0-rc.0
1.6.0-rc.1
1.5.9
1.6.0-rc.2
1.6.0
1.5.10
1.6.1
1.5.11
1.6.2
1.6.3
1.6.4
1.6.5

This draft deletes the entire topic.

Examples

  • 6

    This example shows setting up a small application with 3 routes, each with it's own view and controller, using the controllerAs syntax.

    We configure our router at the angular .config function

    1. We inject $routeProvider into .config
    2. We define our route names at the .when method with a route definition object.
    3. We supply the .when method with an object specifying our template or templateUrl, controller and controllerAs

    app.js

    angular.module('myApp', ['ngRoute'])
      .controller('controllerOne', function() {
        this.message = 'Hello world from Controller One!';
      })
      .controller('controllerTwo', function() {
        this.message = 'Hello world from Controller Two!';
      })
      .controller('controllerThree', function() {
        this.message = 'Hello world from Controller Three!';
      })
      .config(function($routeProvider) {
        $routeProvider
        .when('/one', {
          templateUrl: 'view-one.html',
          controller: 'controllerOne',
          controllerAs: 'ctrlOne'
        })
        .when('/two', {
          templateUrl: 'view-two.html',
          controller: 'controllerTwo',
          controllerAs: 'ctrlTwo'
        })
        .when('/three', {
          templateUrl: 'view-three.html',
          controller: 'controllerThree',
          controllerAs: 'ctrlThree'
        })
        // redirect to here if no other routes match
        .otherwise({
          redirectTo: '/one'
        });
      });
    

    Then in our HTML we define our navigation using <a> elements with href, for a route name of helloRoute we will route as <a href="#/helloRoute">My route</a>

    We also provide our view with a container and the directive ng-view to inject our routes.

    index.html

    <div ng-app="myApp">
      <nav>
        <!-- links to switch routes -->
        <a href="#/one">View One</a>
        <a href="#/two">View Two</a>
        <a href="#/three">View Three</a>
      </nav>
      <!-- views will be injected here -->
      <div ng-view></div>
      <!-- templates can live in normal html files -->
      <script type="text/ng-template" id="view-one.html">
        <h1>{{ctrlOne.message}}</h1>
      </script>
    
      <script type="text/ng-template" id="view-two.html">
        <h1>{{ctrlTwo.message}}</h1>
      </script>
    
      <script type="text/ng-template" id="view-three.html">
        <h1>{{ctrlThree.message}}</h1>
      </script>
    </div>
    
  • 3

    The simplest manner of defining custom behavior for individual routes would be fairly easy.

    In this example we use it to authenticate a user :

    1) routes.js: create a new property (like requireAuth) for any desired route

    angular.module('yourApp').config(['$routeProvider', function($routeProvider) {
        $routeProvider
            .when('/home', {
                templateUrl: 'templates/home.html',
                requireAuth: true
            })
            .when('/login', {
                templateUrl: 'templates/login.html',
            })
            .otherwise({
                redirectTo: '/home'
            });
    }])
    

    2) In a top-tier controller that isn't bound to an element inside the ng-view (to avoid conflict with angular $routeProvider), check if the newUrl has the requireAuth property and act accordingly

    angular.module('YourApp').controller('YourController', ['$scope', 'session', '$location',
        function($scope, session, $location) {
    
            $scope.$on('$routeChangeStart', function(angularEvent, newUrl) {
                
                if (newUrl.requireAuth && !session.user) {
                    // User isn’t authenticated
                    $location.path("/login");
                }
                
            });
        }
    ]);
    
  • 2

    This example extends the basic example passing parameters in the route in order to use them in the controller

    To do so we need to:

    1. Configure the parameter position and name in the route name
    2. Inject $routeParams service in our Controller

    app.js

    angular.module('myApp', ['ngRoute'])
      .controller('controllerOne', function() {
        this.message = 'Hello world from Controller One!';
      })
      .controller('controllerTwo', function() {
        this.message = 'Hello world from Controller Two!';
      })
      .controller('controllerThree', ['$routeParams', function($routeParams) {
        var routeParam = $routeParams.paramName
    
        if ($routeParams.message) {
            // If a param called 'message' exists, we show it's value as the message
            this.message = $routeParams.message;
        } else {
            // If it doesn't exist, we show a default message
            this.message = 'Hello world from Controller Three!';
        }
      }])
      .config(function($routeProvider) {
        $routeProvider
        .when('/one', {
          templateUrl: 'view-one.html',
          controller: 'controllerOne',
          controllerAs: 'ctrlOne'
        })
        .when('/two', {
          templateUrl: 'view-two.html',
          controller: 'controllerTwo',
          controllerAs: 'ctrlTwo'
        })
        .when('/three', {
          templateUrl: 'view-three.html',
          controller: 'controllerThree',
          controllerAs: 'ctrlThree'
        })
        .when('/three/:message', { // We will pass a param called 'message' with this route
          templateUrl: 'view-three.html',
          controller: 'controllerThree',
          controllerAs: 'ctrlThree'
        })
        // redirect to here if no other routes match
        .otherwise({
          redirectTo: '/one'
        });
      });
    

    Then, withoud making any changes in our templates, only adding a new link with custom message, we can see the new custom message in our view.

    index.html

    <div ng-app="myApp">
      <nav>
        <!-- links to switch routes -->
        <a href="#/one">View One</a>
        <a href="#/two">View Two</a>
        <a href="#/three">View Three</a>
        <!-- New link with custom message -->
        <a href="#/three/This-is-a-message">View Three with "This-is-a-message" custom message</a>
      </nav>
      <!-- views will be injected here -->
      <div ng-view></div>
      <!-- templates can live in normal html files -->
      <script type="text/ng-template" id="view-one.html">
        <h1>{{ctrlOne.message}}</h1>
      </script>
    
      <script type="text/ng-template" id="view-two.html">
        <h1>{{ctrlTwo.message}}</h1>
      </script>
    
      <script type="text/ng-template" id="view-three.html">
        <h1>{{ctrlThree.message}}</h1>
      </script>
    </div>
    
Please consider making a request to improve this example.

Syntax

Syntax

Parameters

Parameters

Remarks

The ngRoute is a build-in module provides routing and deeplinking services and directives for angular apps.

Full documentation about ngRoute is avalable on https://docs.angularjs.org/api/ngRoute

Still have a question about Routing using ngRoute? Ask Question

Topic Outline


    We are no longer accepting contributions to Documentation. Drafts cannot be modified.