
yarn add vue-page-title # npm i vue-page-title
import { createApp } from 'vue';
import { pageTitle } from 'vue-page-title';
const app = createApp(Root);
app.use(
pageTitle({
suffix: '- Vue Page Title',
mixin: true,
}),
);
| Vue | Version |
|---|---|
| v2 | v1.* |
| v3 | v3.* |
Version 3 ships as an ES module only. Update your imports if you relied on legacy bundle fields:
import { pageTitle } from 'vue-page-title';
Breaking changes in v3:
main, unpkg, and jsdelivr fields)exports.import pointing to dist/index.jsAll resources from v1 works on v2.
Now mixin is optional and must be defined as true to be automatically registered in the app.
| Name | Type | Description |
|---|---|---|
| suffix | String |
suffix for the value of the page title tag |
| prefix | String |
prefix for the value of the page title tag |
| separator | String |
a string that comes between the prefix and the title / the title and the suffix, defaults to a space |
| mixin | Boolean |
if true, enable plugin mixin in the components |
| router | VueRouter instance | if present, allows you to set the title via the route. |
| setTitleMethod | Function |
custom method of setting title |
{{ title }}
const { title } = useTitle('initial title`)
const name = ref('initial name');
const { title } = useTitle(name);
const product = ref({ name: 'One Piece 1017' });
const { title } = useTitle(() => product.name);
const product = ref({ name: 'One Piece 1017' });
const name = computed(() => product.name);
const { title } = useTitle(name);
setTitle to dynamically change the titleconst product = ref({ name: 'One Piece 1017' });
const { setTitle } = useTitle();
watchEffect(() => {
setTitle(product.name);
});
With the mixin option enabled, just set the title option inside the component.
Within the component it is still possible to update the $title state using $setPageTitle function, it is also available to be used within the component template.
The option
mixinmust betrue.
{{ $title }}
You are able to turn the title changes acative, like a computed.
{{ $title }}
This is particularly useful for internationalization.
This is an example using vue-i18n@9.
export default {
title: ({ $t }) => $t('pages.clients.title'),
};
import { createApp } from 'vue';
import { pageTitle } from 'vue-page-title';
import router from 'path/to/application/router';
const app = createApp(Root);
app.use(pageTitle({ router }));
path/to/application/router
import { createRouter, createWebHashHistory } from 'vue-router';
import FooComponent from 'path/to/foo-component';
import HomeComponent from 'path/to/home-component';
const routes = [
{
path: '/',
component: HomeComponent,
meta: {
title: 'Home Page', // Title must be a string.
},
},
{
path: '/foo',
component: FooComponent,
meta: {
title: 'Foo Page',
},
},
];
export default createRouter({
history: createWebHashHistory(),
routes,
});
export default {
title() {
return `My title is: ${this.$route.query.foo}`;
},
};