Aquí hay una forma diferente de hacer cambios en el título. Tal vez no sea tan escalable como una función de fábrica (que posiblemente podría manejar páginas ilimitadas), pero me fue más fácil de entender:
En mi index.html comencé así:
<!DOCTYPE html>
<html ng-app="app">
<head>
<title ng-bind-template="{{title}}">Generic Title That You'll Never See</title>
Luego hice un parcial llamado "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>
Luego volví a "index.html" y agregué el nav.html usando ng-include y ng-view para mis parciales:
<body class="ng-cloak" ng-controller="MainCtrl">
<div ng-include="'partials/nav.html'"></div>
<div>
<div ng-view></div>
</div>
¿Te das cuenta de que ng-cloak? No tiene nada que ver con esta respuesta, pero oculta la página hasta que termine de cargarse, un toque agradable :) Aprenda cómo aquí: Angularjs - parpadean los elementos ng-cloak / ng-show
Aquí está el módulo básico. Lo puse en un archivo llamado "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"});
});
}());
Si mira hacia el final del módulo, verá que tengo una página de detalles de criaturas basada en: id. Es un parcial que se usa desde la página Crispy Critters. [Corny, lo sé, tal vez es un sitio que celebra todo tipo de nuggets de pollo;) De todos modos, puedes actualizar el título cuando un usuario hace clic en cualquier enlace, así que en mi página principal de Crispy Critters que lleva a la página de detalles de criaturas, ahí es donde iría la actualización de $ root.title, tal como viste en el nav.html anterior:
<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>
Lo siento mucho viento, pero prefiero una publicación que brinde suficientes detalles para ponerla en marcha. Tenga en cuenta que la página de ejemplo en los documentos de AngularJS está desactualizada y muestra una versión 0.9 de ng-bind-template. Puedes ver que no es muy diferente.
Pensamiento posterior: sabes esto pero está aquí para cualquier otra persona; en la parte inferior de index.html, uno debe incluir app.js con el módulo:
<!-- APP -->
<script type="text/javascript" src="js/app.js"></script>
</body>
</html>