
在网上想找可以动态设置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 及本文链接,禁止用于商业目的
评论