在网上想找可以动态设置head的vue插件的时候发现了vue-meta,但是在2021就已经停更了
又在评论区发现了 unhead 这款替代品
unhead
直译 无头
插件真的是太震撼我了,基本封装好了所有head
相关的api
而且不止限于Vue使用
一.安装
bash
yarn add @unhead/vue
官网 https://unhead.harlanzw.com/
二.挂载
Vue 3
ts
import { createHead } from '@unhead/vue'
import { createApp } from 'vue'
const app = createApp()
const head = createHead()
app.use(head)
app.mount('#app')
Vue 2
ts
import { createHead, Vue2ProvideUnheadPlugin } from '@unhead/vue'
import Vue from 'vue'
const head = createHead()
Vue.use(Vue2ProvideUnheadPlugin, head)
Vue.use(head)
Vue({
el: '#app',
})
三.使用
ts
import { useHead } from '@unhead/vue'
const myPage = ref({ description: 'This is my page' })
const title = ref('title')
const myScript = computed(() => ({
src: 'https://example.com/script.js',
defer: true,
}))
useHead({
// ref (recommended)
title,
// computer getter (recommended)
meta: [{ name: 'description', content: () => myPage.value.description },],
// computed (not recommended)
script: [computed(() => ({
src: 'https://example.com/script.js',
defer: true,
}))],
})
四.进阶玩法 (标题模板)
标题模板允许您以统一的方式呈现页面标题。
使用 titleTemplate
键可以为页面标题设置模板。
- 带有 , 的字符串
%s
被替换为title
ts
useHead({
titleTemplate: 'My Site - %s',
})
- 一个函数,它有一个可选的标题作为唯一的参数并返回一个字符串
ts
useHead({
titleTemplate: (title?: string) => `${title} - My Site`,
})
使用
ts
useHead({ title: 'My Page' })
这样网站标题就被渲染成了
My Page - My Site
某个特定页面禁用模板
可以设置 titleTemplate
为 null
.
ts
useHead({
titleTemplate: null,
})
默认标题
ts
useHead({
titleTemplate: (title?: string) => !title ? 'Default title' : `${title} - My Site`,
})
离开页面小提示
ts
let oldtitle: string // 记录旧标题,方便切换回来
function titleTemplate(title?: string) {
oldtitle = title
return `${title} - ${useConfig.value?.userInfo?.title}`
}
// 调用原生接口判断是否离开了页面
document.addEventListener('visibilitychange', () => {
const state = document.visibilityState
if (state === 'visible') {
useHead({ title: oldtitle, titleTemplate })
}
else if (state === 'hidden') {
useHead({ title: '啊💔怎么离开了呢💔怎么会?怎么会呢!', titleTemplate: null })
}
})
useHead({
titleTemplate,
})
Vue3 动态设置head插件unhead介绍- 支持标题模板,meta等。vue-meta 替代品
https://ocyss.icu/article/skill/web/vue3-unhead-dynamic-head-meta-replacement本文采用 CC BY-NC-SA 4.0 许可协议
转载请注明作者 Ocyss_04 及本文链接,禁止用于商业目的
评论