Задать вопрос

Пытаюсь вывести title и т.д. для каждой страницы через vue3, vueuse/head, как правильно сделать?

Обычный сайт на html, есть две страницы, главная и контакты, изучаю vue3, на данный момент сделал подгрузку страниц из файлов при переходе по ссылкам. Хотел вывести для каждой странице свои title и т.д.

Html
<!doctype html>
<html lang="ru">

  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, minimum-scale=1.0">

    <script src="https://unpkg.com/vue@3"></script>
    <script src="https://unpkg.com/vue-router@4"></script>

    <script src="https://unpkg.com/@vueuse/head"></script>
    <script type="module" src="main.js" defer></script>
  </head>

  <body>
    <div id="app">
      <nav>
        <router-link to="/">Главная</router-link> |
        <router-link to="/contacts">Контакты</router-link>
      </nav>

      <!-- Место для отображения содержимого текущего маршрута -->
      <router-view></router-view>
    </div>
  </body>

</html>


Main.js
import { useHead } from '@vueuse/head' // Импорт useHead
import { createApp } from 'vue' // Импорт Vue
import { createRouter, createWebHistory } from 'vue-router' // Импорт Vue Router

const Home = {
	data() {
		return {
			content: '',
		}
	},
	async mounted() {
		this.content = await loadTemplate('/main.php')
		useHead({
			title: 'Главная страница - Vue3 тест',
			meta: [
				{ name: 'description', content: 'Описание главной страницы' },
				{ name: 'keywords', content: 'ключевые слова для главной страницы' },
			],
		})
	},
	template: `<div v-html="content"></div>`,
}

const Contacts = {
	data() {
		return {
			content: '',
		}
	},
	async mounted() {
		this.content = await loadTemplate('/contacts.php')
		useHead({
			title: 'Контакты - Vue3 тест',
			meta: [
				{ name: 'description', content: 'Описание страницы контактов' },
				{ name: 'keywords', content: 'ключевые слова для страницы контактов' },
			],
		})
	},
	template: `<div v-html="content"></div>`,
}

const routes = [
	{ path: '/', component: Home },
	{ path: '/contacts', component: Contacts },
]

const router = createRouter({
	history: createWebHistory(),
	routes,
})

useHead({
	title: 'Vue3 тест',
	meta: [
		{ name: 'description', content: '' },
		{ name: 'keywords', content: '' },
		{ name: 'author', content: '' },
		{ name: 'copyright', content: '' },
		{ name: 'robots', content: 'index, follow' },
	],
	link: [{ rel: 'stylesheet', href: '/media/css/st.css' }],
})

const app = createApp({})
app.use(router).mount('#app')


Получаю в консоле разные ошибки.

Ресурс с «https://unpkg.com/@vueuse/head@2.0.0/dist/index.cjs» был заблокирован из-за несоответствия MIME-типа («text/plain») (X-Content-Type-Options: nosniff).

Uncaught TypeError: Спецификатор «@vueuse/head» являлся голым спецификатором, но не был переназначен на что-либо. Связанные спецификаторы модуля должны начинаться с «./», «../» или «/».
  • Вопрос задан
  • 37 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
Вот тут написано, что с cdn надо подключать так:
<script src="https://unpkg.com/@vueuse/shared"></script>
<script src="https://unpkg.com/@vueuse/core"></script>


и потом использовать так:
const {useTitle} = window.VueUse

а используемый @vueuse/head для работы через cdn вообще не приспособлен, только с системами сборки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы