Aqui está uma maneira diferente de fazer alterações de título. Talvez não seja tão escalável quanto uma função de fábrica (que poderia lidar com páginas ilimitadas), mas era mais fácil para mim entender:
No meu index.html, comecei assim:
<!DOCTYPE html>
<html ng-app="app">
<head>
<title ng-bind-template="{{title}}">Generic Title That You'll Never See</title>
Então eu fiz um parcial chamado "nav.html":
<div ng-init="$root.title = 'Welcome'">
<ul class="unstyled">
<li><a href="#/login" ng-click="$root.title = 'Login'">Login</a></li>
<li><a href="#/home" ng-click="$root.title = 'Home'">Home</a></li>
<li><a href="#/admin" ng-click="$root.title = 'Admin'">Admin</a></li>
<li><a href="#/critters" ng-click="$root.title = 'Crispy'">Critters</a></li>
</ul>
</div>
Então voltei para "index.html" e adicionei o nav.html usando ng-include e ng-view para minhas parciais:
<body class="ng-cloak" ng-controller="MainCtrl">
<div ng-include="'partials/nav.html'"></div>
<div>
<div ng-view></div>
</div>
Observe que ng-manto? Não tem nada a ver com esta resposta, mas oculta a página até terminar de carregar, com um toque agradável :) Aprenda como aqui: Angularjs - elementos ng-cloak / ng-show piscam
Aqui está o módulo básico. Coloquei-o em um arquivo chamado "app.js":
(function () {
'use strict';
var app = angular.module("app", ["ngResource"]);
app.config(function ($routeProvider) {
// configure routes
$routeProvider.when("/", {
templateUrl: "partials/home.html",
controller:"MainCtrl"
})
.when("/home", {
templateUrl: "partials/home.html",
controller:"MainCtrl"
})
.when("/login", {
templateUrl:"partials/login.html",
controller:"LoginCtrl"
})
.when("/admin", {
templateUrl:"partials/admin.html",
controller:"AdminCtrl"
})
.when("/critters", {
templateUrl:"partials/critters.html",
controller:"CritterCtrl"
})
.when("/critters/:id", {
templateUrl:"partials/critter-detail.html",
controller:"CritterDetailCtrl"
})
.otherwise({redirectTo:"/home"});
});
}());
Se você olhar para o final do módulo, verá que tenho uma página de detalhes de bichos baseada em: id. É uma parte parcial usada na página Crispy Critters. [Corny, eu sei - talvez seja um site que celebra todos os tipos de nuggets de frango;) De qualquer forma, você pode atualizar o título quando um usuário clica em qualquer link, portanto, na minha página principal do Crispy Critters que leva à página de detalhes do bicho, é para onde a atualização do $ root.title iria, assim como você viu no nav.html acima:
<a href="#/critters/1" ng-click="$root.title = 'Critter 1'">Critter 1</a>
<a href="#/critters/2" ng-click="$root.title = 'Critter 2'">Critter 2</a>
<a href="#/critters/3" ng-click="$root.title = 'Critter 3'">Critter 3</a>
Desculpe muito vento, mas eu prefiro um post que dê detalhes suficientes para colocá-lo em funcionamento. Observe que a página de exemplo nos documentos do AngularJS está desatualizada e mostra uma versão 0.9 do ng-bind-template. Você pode ver que não é tão diferente assim.
Pensamento tardio: você sabe disso, mas está aqui para mais alguém; na parte inferior do index.html, é necessário incluir o app.js no módulo:
<!-- APP -->
<script type="text/javascript" src="js/app.js"></script>
</body>
</html>