Oto inny sposób zmiany tytułu. Może nie jest tak skalowalny jak funkcja fabryczna (która może obsługiwać nieograniczoną liczbę stron), ale łatwiej mi było zrozumieć:
W moim index.html zacząłem tak:
<!DOCTYPE html>
<html ng-app="app">
<head>
<title ng-bind-template="{{title}}">Generic Title That You'll Never See</title>
Następnie utworzyłem częściowy o nazwie „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>
Potem wróciłem do „index.html” i dodałem nav.html, używając ng-include i ng-view dla moich stronicujących:
<body class="ng-cloak" ng-controller="MainCtrl">
<div ng-include="'partials/nav.html'"></div>
<div>
<div ng-view></div>
</div>
Zauważ, że ng-cloak? Nie ma to nic wspólnego z tą odpowiedzią, ale ukrywa stronę, dopóki nie zakończy się ładowanie, miły akcent :) Dowiedz się, jak tutaj: Angularjs - elementy ng-cloak / ng-show migają
Oto podstawowy moduł. Umieszczam go w pliku o nazwie „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"});
});
}());
Jeśli spojrzysz na koniec modułu, zobaczysz, że mam stronę ze szczegółami w oparciu o: id. Jest to częściowy, który jest używany ze strony Crispy Critters. [Corny, wiem - może to strona, która celebruje wszelkiego rodzaju samorodki kurczaka;) W każdym razie możesz zaktualizować tytuł, gdy użytkownik kliknie dowolny link, więc na mojej głównej stronie Crispy Critters, która prowadzi do strony ze szczegółami o stworzeniach, właśnie tam poszedłaby aktualizacja $ root.title, tak jak widzieliście w nav.html powyżej:
<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>
Przepraszam, ale wietrznie, ale wolę post, który zawiera wystarczająco dużo szczegółów, aby go uruchomić. Zauważ, że przykładowa strona w dokumentach AngularJS jest nieaktualna i zawiera wersję 0.9 ng-bind-template. Widać, że nie jest tak bardzo inaczej.
Po namyśle: wiesz o tym, ale jest tu dla każdego; na dole index.html należy dołączyć app.js do modułu:
<!-- APP -->
<script type="text/javascript" src="js/app.js"></script>
</body>
</html>