21

So this is what I am trying to accomplish:

'use strict';

var app = angular.module('myModule', ['ngRoute']);

app.config(function($routeProvider) {
  $routeProvider
    .when('/', {
      redirectTo: '/pages'
    })
    .when('/pages/:pageName', {
      templateUrl: 'views/pages/'+pageName+'html',
      controller: 'MainController'
    });
});

Basically, I want to use the uri to determine which template is used. Currently I get an error that pageName is not defined which I understand. What would be a different way of doing this? Thanks!

Davin Tryon
  • 66,517
  • 15
  • 143
  • 132
Georgi Angelov
  • 4,338
  • 12
  • 67
  • 96

2 Answers2

38

templateUrl can be a function accepting object of route parameters:

.when('/pages/:pageName', {
    templateUrl: function(params) {
        return 'views/pages/' + params.pageName + '.html';
    },
    controller: 'MainController'
});
dfsq
  • 191,768
  • 25
  • 236
  • 258
  • Thank you. this worked like a charm. Only one thing - missing a . between the ' and the html like so : + '.html' .Thank you again! – Georgi Angelov Dec 17 '13 at 15:46
5

templateUrl can be use as function with returning generated URL. We can manipulate url with passing argument which takes routeParams.

See the example.

.when('/:screenName/list',{
    templateUrl: function(params){
         return params.screenName +'/listUI'
    }
})

Hope this help.

Ravi K.
  • 241
  • 3
  • 3