Vue3设置动态head插件unhead的使用 支持title,meta,js等

如果我们想要在vue3的单页面上引入js,或者设置title和meta,我们可以使用unhead插件。 unhead插件文档:https://unhead.unjs.io/setup/vue/installation

安装

yarn add @unhead/vue
//或者
npm install @unhead/vue
//或者
pnpm add @unhead/vue

挂在

  • vue3
import { createApp } from 'vue'
import { createHead } from '@unhead/vue'

const app = createApp()

const head = createHead()
app.use(head)

app.mount('#app')
  • vue2
import Vue from 'vue'
import { createHead } from '@unhead/vue'
import { UnheadPlugin } from '@unhead/vue/vue2'

const head = createHead()
Vue.use(UnheadPlugin)

new Vue({
  el'#app',
  unhead: head,
})

使用useHead和useScript

  • 方法一
<script setup lang="ts">
import { ref, computed } from 'vue';
import { useHead, useScript } from '@unhead/vue';
//通过useHead函数设置页面的标题
useHead({
  title'Hello World',
});
//通过useScript函数引入外部脚本,并返回其中的addConfetti函数
const { addConfetti } = useScript({
  src'https://example.com/script.js',
  use() => {
    console.log({ jsconfettiwindow.JSConfetti });
    return window.JSConfetti;
  },
});
//声明window对象中的JSConfetti属性,用于类型检查。
declare module window {
  const JSConfetti: any;
}
</script>

<template>
  <div>Hello World</
div>
</template>

  • 方法二
const myPage = ref({ description'This is my page' })
const title = ref('title')
const myScript = computed(() => ({
  src'https://example.com/script.js',
  defertrue,
}))
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',
    defertrue,
  }))],
})

这个方法也行得通,但是不推荐

使用Head组件

unhead包导出了一个<Head>组件,可用于管理头部标签。虽然建议使用useHead组合式函数,因为它提供了更灵活的API并具有完整的TypeScript支持,但<Head>组件可能更适合你的项目

该组件接受任何你通常放在实际<head>中的子元素,并使用unhead进行渲染。它可以帮助你更方便地管理和渲染头部标签。

<script lang="ts" setup>
import { Head } from '@unhead/vue/components'
</script>

<template>
  <Head>
    <title>My awesome site</
title>
    <meta name="description" content="My awesome site description">
  </Head>

</template>

标题模版

标题模板允许您以统一的方式呈现页面标题。使用  titleTemplate  键可以为页面标题设置模板。

  • 字符串%s被替换为title
useHead({
  titleTemplate'My Site - %s',
})
  • 一个函数,它有一个可选的标题作为唯一的参数并返回一个字符串
useHead({
  titleTemplate(title?: string) => `${title} - My Site`,
})
  • 使用
useHead({ title"My Page" })

这样网站标题就被渲染成了My Page – My Site



原文始发于微信公众号(大前端编程教学):Vue3设置动态head插件unhead的使用 支持title,meta,js等

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/224467.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!