← Retour aux projets
#Install
#Use
Vue Page Title
#Vue Page Title
#Install 
yarn add vue-page-title # npm i vue-page-title
#Setup
import { createApp } from 'vue'; import { pageTitle } from 'vue-page-title'; const app = createApp(Root); app.use( pageTitle({ suffix: '- Vue Page Title', mixin: true, }), );
#Examples
#Compatibility
#Migration from v2
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:
- Removed UMD, CJS, and IIFE builds (
main,unpkg, andjsdelivrfields) - Package entry is now
exports.importpointing todist/index.js - Node.js 20.19+ is required for development and CI
#Migration from v1
All resources from v1 works on v2.
Now mixin is optional and must be defined as true to be automatically registered in the app.
#Options
| 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 |
#Usage
#Composition API
<script> import { createApp, h, ref, computed, onBeforeUnmount } from 'vue'; import { useTitle } from 'vue-page-title'; const CAPTAINS = [ 'Monkey D. Luffy', 'Trafalgar D. Water Law', 'Eustass Kid', 'Shanks', 'Edward Newgate', 'Charlotte Linlin', 'Capone Bege', 'Gol D. Roger', ]; const getCapitain = () => CAPTAINS[Math.floor(Math.random() * CAPTAINS.length)]; export default defineComponent({ setup() { const current = ref('Capitains'); const { title } = useTitle(current); const refresh = () => { current.value = getCapitain(); }; const interval = setInterval(refresh, 5000); onBeforeUnmount(() => { clearInterval(interval); }); return { title, }; }, }); </script> <template> <h1>{{ title }}</h1> </template>
const { title } = useTitle('initial title`)
#React from ref state
const name = ref('initial name'); const { title } = useTitle(name);
#Use like a watch source argument
const product = ref({ name: 'One Piece 1017' }); const { title } = useTitle(() => product.name);
#Pass a computed as argument
const product = ref({ name: 'One Piece 1017' }); const name = computed(() => product.name); const { title } = useTitle(name);
#Use setTitle to dynamically change the title
const product = ref({ name: 'One Piece 1017' }); const { setTitle } = useTitle(); watchEffect(() => { setTitle(product.name); });
#Mixin
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.
<script> const CREW = [ 'Monkey D. Luffy', 'Roronoa Zoro', 'Nami', 'Usopp', 'Sanji', 'Tony Tony Chopper', 'Nico Robin', 'Franky', 'Brook', 'Jinbe', 'Nefertari Vivi', ]; export default { title: 'Mugiwara no Ichimi', mounted() { this.$interval = setInterval(() => { this.$setPageTitle(CREW[Math.floor(Math.random() * CREW.length)]); }, 2000); }, beforeDestroy() { clearInterval(this.$interval); }, }; </script> <template> <h1>{{ $title }}</h1> </template>
#Function title
You are able to turn the title changes acative, like a computed.
<script> const EMPERORS = ['Shanks', 'Marshall D. Teach', 'Monkey D. Luffy', 'Buggy']; export default { title() { return `🏴☠️ ${this.emperor}`; }, data() { return { emperor: 'Four Emperors', }; }, mounted() { this.$interval = setInterval(() => { this.emperor = EMPERORS[Math.floor(Math.random() * EMPERORS.length)]; }, 2000); }, beforeDestroy() { clearInterval(this.$interval); }, }; </script> <template> <h1>{{ $title }}</h1> </template>
This is particularly useful for internationalization.
This is an example using vue-i18n@9.
export default { title: ({ $t }) => $t('pages.clients.title'), };
#Vue Router integration
#Setup
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, });
#Watching routes
export default { title() { return `My title is: ${this.$route.query.foo}`; }, };