ng-page-title v1.3.1
ng-page-title
Page title directive for an Angular project
Why
The <title> tag is something that needs to be done on pretty much every project, but can be a right pain in the arse
in AngularJS if you aren't sure what you're doing. This makes it the work of but-a-moment to put in a dynamic page
title. It also interpolates resolved data automatically.
This works for both UI Router states and the default
Angular Route. If you are using UI Router, use the
state-title directive and if you are using ngRoute then use the page-title directive.
Get Started
Get the package
npm
Use this if getting using Browserify (my preferred solution)
// Get dependency using command line
npm install ng-page-title --save-dev
// Include in your main Angular file, eg app.js
require("ng-page-title");Bower
Use this if using Bower for your dependency manager
// Get dependency using command line
bower install ng-page-title --save
// Include in your main HTML file
<script src="/path/to/dist/ng-page-title.min.js"></script>CDN
Use this if not using any dependency manager (not recommended)
// Include in your HTML file
<script src="https://cdn.rawgit.com/riggerthegeek/ng-page-title/master/dist/ng-page-title.min.js"></script>Include the package in your Angular app
Create your app and configure UI Router as normal. Include ng-page-title by including it as a dependency to Angular
angular.module("myApp", [
"ngPageTitle"
...
]);Ensure that the ng-app tag is on your <html> tag (this might be on your <body> tag). Then you can create your
<title state-title></title> or <title page-title></title> tag. Here's the example HTML
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<title state-title></title>
</head>
...
</html>And if you're using ngRoute
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<title page-title></title>
</head>
...
</html>Now, in your routing files, set the pageTitle on the data object
myApp.config(function ($stateProvider) {
$stateProvider
.state("state1", {
data: {
pageTitle: "Home"
},
url: "/state1",
templateUrl: "partials/state1.html"
});
}Now, when you go to that state, the title tag will read:
<title state-title>Home</title>This directive interpolates the string too, so you can put in dynamic page titles
myApp.config(function ($stateProvider) {
$stateProvider
.state("article", {
data: {
pageTitle: "Article: {{ article.getTitle() }}"
},
resolve: {
article: function () {
return {
getTitle: function () {
return "Article Title"
}
};
}
},
url: "/article/:name",
templateUrl: "partials/article.html"
});
}This gives:
<title state-title>Article: Article Title</title>Options
The API is the same for state-title and page-title - please treat it as interchangeable in this section.
Default title
By default, the default title is "Untitled page" If you want to put in your own default title, then pass a value in
to the page-title/state-title, eg: <title page-title="Default title"></title> or
<title state-title="Default title"></title>. This example will set to "Default title"
Title element
By default, the directive will look for the pageTitle inside the data object. This can be changed by setting the
title-element, eg: <title state-title title-element="title"></title>. This example will look for data.title
Pattern
There might be times when you want to set a site title and only change the page title section, in which case use
pattern. This will replace "%s" with the page title, eg: <title state-title pattern="%s | My site"></title>. For a
page called "Home", this will set the title to "Home | My site".
This will also work if you decide you want the title in multiple times.
Named UI-Router views
When using named views only your primary view should contain a page title. If more than one page title is defined, the first one found will be used.
.state('state', {
url: '...',
views: {
viewA: {
templateUrl: '...',
data: {
pageTitle: 'I am a title!',
},
},
viewB: {
templateUrl: '...',
data: {
pageTitle: 'So am I, but no one will ever see me.',
},
},
},
})License
MIT License