angular/aio/content/guide/set-document-title.md
Pete Bacon Darwin 9e661e58d1 docs(aio): image sweep (#16609)
* fix(aio): allow code blocks to clear floated images

Previously the negative margin on the code headings were causing
floated images to overlay the start of a code block. Now all code block
successfully clear all floated elements.

* feat(aio): add a `.clear` class for clearing floating images

* fix(aio): tidy up image styles

The css rules for `img.right` and `img.left` allow authors easy
access to floating an image on the left or right, respectively.

The `.image-display` rule which was always found on a figure
has been simplified so that all figures have this styling. It is very
unlikely that a figure will be used outside the content area; and
at this time it seems like `figure` is as good an indicator that we
want this kind of styling as anything.

Now that images are all tagged with width and height values, we cannot
assume to modify these dimensions via CSS as it can cause the image to
lose its correct proportions.  Until we find a better solition we must set
`height` to `auto` when the screen width is below 1300px to ensure that
these images maintain their proportions as they get shrunk to fit.

* docs(aio): general tidy up of image HTML in guides

Previously, the guides have a lot of inline image styling and unnecessary
use of the `image-display` css class.
Images over 700px are problematic for guide docs, so those have been given
specific widths and associated heights.

* docs(aio): use correct anchor for "back to the top" link

The `#toc` anchor does not work when the page is
wide enough that the TOC is floating to the side.

* build(aio): add `#top-of-page` to path variants for link checking

Since the `#top-of-page` is outside the rendered docs
the `checkAnchorLinks` processor doesn't find them
as valid targets for links.
Adding them as a `pathVariant` solves this problem
but will still catch links to docs that do not actually exist.

* fix(aio): ensure that headings clear floated images

* fix(aio): do not force live-example embedded image to 100% size

This made them look too big, generally. Leaving them with no size means
that they will look reasonable in large viewports and switch to 100% width
in narrow viewports.
2017-05-09 15:53:32 -07:00

3.8 KiB

@title Set the Document Title

@intro Setting the document or window title using the Title service.

@description

{@a top}

Your app should be able to make the browser title bar say whatever you want it to say. This cookbook explains how to do it.

See the .

pop out the window pop out the window

To see the browser title bar change in the live example, open it again in the Plunker editor by clicking the icon in the upper right, then pop out the preview window by clicking the blue 'X' button in the upper right corner.

The problem with <title>

The obvious approach is to bind a property of the component to the HTML <title> like this:

<title>{{This_Does_Not_Work}}</title>

Sorry but that won't work. The root component of the application is an element contained within the <body> tag. The HTML <title> is in the document <head>, outside the body, making it inaccessible to Angular data binding.

You could grab the browser document object and set the title manually. That's dirty and undermines your chances of running the app outside of a browser someday.

Running your app outside a browser means that you can take advantage of server-side pre-rendering for near-instant first app render times and for SEO. It means you could run from inside a Web Worker to improve your app's responsiveness by using multiple threads. And it means that you could run your app inside Electron.js or Windows Universal to deliver it to the desktop.

Use the Title service

Fortunately, Angular bridges the gap by providing a Title service as part of the Browser platform. The Title service is a simple class that provides an API for getting and setting the current HTML document title:

  • getTitle() : string—Gets the title of the current HTML document.
  • setTitle( newTitle : string )—Sets the title of the current HTML document.

You can inject the Title service into the root AppComponent and expose a bindable setTitle method that calls it:

Bind that method to three anchor tags and voilà!

Set title

Here's the complete solution:

Why provide the Title service in bootstrap

Generally you want to provide application-wide services in the root application component, AppComponent.

This cookbook recommends registering the title service during bootstrapping, a location you reserve for configuring the runtime Angular environment.

That's exactly what you're doing. The Title service is part of the Angular browser platform. If you bootstrap your application into a different platform, you'll have to provide a different Title service that understands the concept of a "document title" for that specific platform. Ideally, the application itself neither knows nor cares about the runtime environment.

Back to top