Ecco un modo diverso di apportare modifiche al titolo. Forse non è scalabile come una funzione di fabbrica (che potrebbe concepibilmente gestire pagine illimitate) ma è stato più facile per me capire:
Nel mio index.html ho iniziato così:
<!DOCTYPE html>
<html ng-app="app">
<head>
<title ng-bind-template="{{title}}">Generic Title That You'll Never See</title>
Quindi ho creato un parziale chiamato "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>
Quindi sono tornato a "index.html" e ho aggiunto nav.html usando ng-include e ng-view per i miei parziali:
<body class="ng-cloak" ng-controller="MainCtrl">
<div ng-include="'partials/nav.html'"></div>
<div>
<div ng-view></div>
</div>
Notate quel ng-mantello? Non ha nulla a che fare con questa risposta, ma nasconde la pagina fino al termine del caricamento, un bel tocco :) Scopri come qui: Angularjs - ng-cloak / ng-show elements lampeggia
Ecco il modulo base. L'ho inserito in un file chiamato "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 guardi verso la fine del modulo, vedrai che ho una pagina con i dettagli delle creature basata su: id. È un parziale che viene utilizzato dalla pagina Crispy Critters. [Corny, lo so - forse è un sito che celebra tutti i tipi di crocchette di pollo;) Ad ogni modo, potresti aggiornare il titolo quando un utente fa clic su qualsiasi collegamento, quindi nella mia pagina Crispy Critters principale che porta alla pagina dei dettagli delle critter, ecco dove andrebbe l'aggiornamento $ root.title, proprio come hai visto nel file nav.html sopra:
<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>
Mi dispiace così ventoso, ma preferisco un post che fornisca dettagli sufficienti per farlo funzionare. Si noti che la pagina di esempio nei documenti AngularJS non è aggiornata e mostra una versione 0.9 di ng-bind-template. Puoi vedere che non è molto diverso.
Ripensamento: lo sai ma è qui per chiunque altro; nella parte inferiore di index.html, è necessario includere app.js con il modulo:
<!-- APP -->
<script type="text/javascript" src="js/app.js"></script>
</body>
</html>