| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
This was originally written by kimroen and has since been upgraded to work with Ember CLI >= 3.4. We at Surkus are big fans of Ember and have taken over abandon projects. We stay up to date with the latest Ember builds and as such need these addons updated quickly.
Install by running
ember install @surkus/ember-cli-document-title
This adds two new keys to your routes:
They can be either strings or functions.
Every time you transition to a route, the following will happen:
If you just put strings as the title for all your routes, that will be used as the title for it.
// routes/posts.js
export default Ember.Route.extend({
title: 'Our Favorite posts!'
});
// routes/post.js
export default Ember.Route.extend({
title: 'Please enjoy this post'
});Let's say you want something like "Posts - My Blog", with "- My Blog" being static, and "Posts" being something you define on each route.
// routes/posts.js
export default Ember.Route.extend({
titleToken: 'Posts'
});This will be collected and bubble up until it hits the Application Route
// routes/application.js
export default Ember.Route.extend({
title: function(tokens) {
return tokens.join(' - ') + ' - My Blog';
}
});In this example, we want something like "Name of current post - Posts - My Blog".
Let's say we have this object as our post-model:
Ember.Object.create({
name: 'Ember is Omakase'
});And we want to use the name of each post in the title.
// routes/post.js
export default Ember.Route.extend({
titleToken: function(model) {
return model.get('name');
}
});This will then bubble up until it reaches our Posts Route:
// routes/posts.js
export default Ember.Route.extend({
titleToken: 'Posts'
});And continue to the Application Route:
// routes/application.js
export default Ember.Route.extend({
title: function(tokens) {
tokens = Ember.makeArray(tokens);
tokens.unshift('My Blog');
return tokens.reverse().join(' - ');
}
});This will result in these titles:
You may be in a situation where it makes sense to have one or more of your titleTokens be asynchronous. For example if a related model is async, or you just enjoy working with Promises in your past-time.
Luckily, you can return a promise from any of your titleToken functions, and they will all be resolved by the time your title function receives them.
An example! Let's say we have these two Ember Data models; a post and its user:
// models/post.js
export default DS.Model.extend({
name: DS.attr('string'),
author: DS.belongsTo('user', { async: true })
});// models/user.js
export default DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string')
});In our document title, we want the name of the author in parenthesis along with the post title.
The author relationship is async, so getting it will return a promise. Here's an example where we return a promise that resolves to the post name plus the author name in parenthesis:
// routes/post.js
export default Ember.Route.extend({
titleToken: function(model) {
var postName = model.get('name');
return model.get('author').then(function(user) {
var authorName = user.get('firstName') + user.get('lastName');
return postName + '(by ' + authorName + ')';
});
}
});With the same configuration for Posts and Application routes as in the previous example, this will result in this title:
It's worth noting that the page title will not update until all the promises have resolved.
Using ember-cli-document-title with ember-cli-head is very straight forward and allows you to use the wonderful route based declarative API for title and still easily add other things to the document's <head> (i.e. meta tags).
Only a few tweaks are needed to use both of these addons together:
ember install ember-cli-head
ember install ember-cli-document-titleconst Router = Ember.Router.extend({
location: config.locationType,
headData: Ember.inject.service(),
setTitle(title) {
this.get('headData').set('title', title);
}
});Remove <title> from your app/index.html.
Update app/templates/head.hbs (added by ember-cli-head):
| Back | FazBrowse Home | New Git URL |