You can do the following:
Create a second controller, specific to the product details case
angular.module('myApp', ['$routeProvider', function($routeProvider) {
$routeProvider
.when('/produto/:codDepartamento', {
templateUrl: 'path/to/lista.html',
controller: 'ProdutoListaController'
})
.when('/produto/ficha/:codProduto', {
templateUrl: 'path/to/detalhes.html',
controller: 'ProdutoDetalhesController'
});
}])
.controller('ProdutoListaController', ['$scope', '$routeParam',
function($scope, $routeParam) {
/* $routeParams.codDepartamento possui o código do dpto */
/* ... */
}
])
.controller('ProdutoDetalhesController', ['$scope', '$routeParam',
function($scope, $routeParam) {
/* $routeParams.codProduto possui o código do produto */
/* ... */
}
]);
Create a route that accepts optional arguments (possible since version 1.2.0 of AngularJS):
angular.module('myApp', ['$routeProvider', function($routeProvider) {
$routeProvider
// Note o sinal de interrogação no codProduto
.when('/produto/:codDpto/:codProduto?', {
templateUrl: 'path/to/template.html',
controller: 'ProdutoController'
});
}])
.controller('ProdutoController', ['$scope', '$routeParam', '$location',
function($scope, $routeParam, $location) {
if ($routeParams.codDpto === "ficha")
if ($routeParams.hasOwnProperty("codProduto") &&
$routeParams.codProduto) {
// Buscar lista de produtos
}
} else {
// Busca Dpto
}
}
]);
Use $location.path()
to find out which route it is:
angular.module('myApp', ['$routeProvider', function($routeProvider) {
$routeProvider
.when('/produto/:codDpto', {
templateUrl: 'path/to/template.html',
controller: 'ProdutoController'
})
.when('/produto/ficha/:codProduto', {
templateUrl: 'path/to/template.html',
controller: 'ProdutoController'
});
}])
.controller('ProdutoController', ['$scope', '$routeParam', '$location',
function($scope, $routeParam, $location) {
if (/^produto\/ficha/.test($location.path())) {
// Busca Produto. Código no $routeParams.codProduto
} else {
// Busca Dpto
}
}
]);
I consider the first alternative to be more "correct".