vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue动态修改页面Title

Vue动态修改页面Title(浏览器页签名称)的三种方法

作者:阿达C

在开发 Vue 项目时,我们经常需要根据不同的页面动态修改浏览器的页签标题(title),那么,如何在 Vue 项目中实现动态修改 document.title 呢?本文将介绍三种实用方法,并结合代码示例,助你轻松实现,需要的朋友可以参考下

前言

在开发 Vue 项目时,我们经常需要根据不同的页面动态修改浏览器的页签标题(title),比如:

那么,如何在 Vue 项目中实现动态修改 document.title 呢?本文将介绍三种实用方法,并结合代码示例,助你轻松实现!

方法一:在组件的 mounted 钩子中修改 title

最简单的方法是在 Vue 组件的 mounted 钩子中直接修改 document.title

示例代码

<template>
  <div>
    <h1>商品详情页</h1>
  </div>
</template>

<script>
export default {
  data() {
    return {
      productName: "Vue 3 官方指南"
    };
  },
  mounted() {
    document.title = `${this.productName} - 我的商城`;
  }
};
</script>

缺点

方法二:使用 Vue Router 监听路由变化,动态修改 title

如果你的项目是多页面应用(SPA),通常会使用 Vue Router 来管理页面切换。在这种情况下,我们可以在全局导航守卫中监听路由变化,并根据 meta 字段动态修改 title

步骤 1:在路由中定义 meta.title

// router/index.js
import { createRouter, createWebHistory } from "vue-router";
import Home from "@/views/Home.vue";
import Product from "@/views/Product.vue";

const routes = [
  {
    path: "/",
    name: "Home",
    component: Home,
    meta: { title: "首页 - 我的商城" }
  },
  {
    path: "/product/:id",
    name: "Product",
    component: Product,
    meta: { title: "商品详情 - 我的商城" }
  }
];

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

export default router;

步骤 2:在 router.beforeEach 中监听并修改 document.title

// main.js
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";

const app = createApp(App);

router.beforeEach((to, from, next) => {
  if (to.meta.title) {
    document.title = to.meta.title;
  }
  next();
});

app.use(router).mount("#app");

效果

优点

缺点

方法三:封装全局 useTitle 组合式 API(Vue 3 推荐)

在 Vue 3 组合式 API 中,我们可以封装一个 useTitle 函数,使 title 绑定到一个 ref 变量,从而在任何组件中轻松修改。

步骤 1:创建 useTitle 组合式 API

// composables/useTitle.js
import { watchEffect } from "vue";

export function useTitle(newTitle) {
  watchEffect(() => {
    document.title = newTitle.value;
  });
}

步骤 2:在组件中使用 useTitle

<template>
  <div>
    <h1>{{ productName }}</h1>
    <button @click="changeTitle">修改标题</button>
  </div>
</template>

<script>
import { ref } from "vue";
import { useTitle } from "@/composables/useTitle";

export default {
  setup() {
    const productName = ref("Vue 3 官方指南");
    const title = ref(`${productName.value} - 我的商城`);

    useTitle(title); // 绑定 title 到页面

    const changeTitle = () => {
      productName.value = "Vue 3 深入解析";
      title.value = `${productName.value} - 我的商城`;
    };

    return { productName, changeTitle };
  }
};
</script>

效果

优点

缺点

总结:哪种方法最适合你?

方法适用场景代码复杂度推荐指数
mounted 直接修改 title适用于简单单页应用⭐⭐
Vue Router meta.title适用于 Vue Router 多页面应用⭐⭐⭐⭐⭐⭐⭐
useTitle 组合式 API适用于 Vue 3 组件内动态修改 title⭐⭐⭐⭐⭐⭐⭐⭐

如果你只是需要在单个页面修改 title方法一(mounted足够。

如果你在Vue Router 项目中管理 title,建议使用方法二(meta.title

如果你想要响应式 title 绑定,并希望代码更清晰,**方法三(useTitle 组合式 API)**是最佳选择!

以上就是Vue动态修改页面Title(浏览器页签名称)的三种方法的详细内容,更多关于Vue动态修改页面Title的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文