angular1 和 vue2.0 实现动态修改网页title

773 阅读1分钟

一、angular1动态修改网页title

1、在router.js中设置路由的title(国际化)

a.state('login',{
url:'/login',
templateUrl:'views/login.html',
controller:'loginCtrl',
title: {zh:'登录', en:'Login'}, // 国际化设置
title: '登录', //非国际化设置
resolve: {}
})

2、在app.min.js 中 angular.module("app").controller 构造器中 设置路由监听

// 国际化设置
const titleName = $cookie('pa_lang') || 'zh'; //国际化获取当前为中还是英,不一定是保存在cookie,有些会保存在sessionStorage中,非国际化不需要这步骤
// 监听路由成功时触发
$rootScope.$on('$stateChangeSuccess', function (toState) {
// 当路由存在title,动态变更当前的title name
if(toState.title && toState.title[titleName]) {
document.title = toState.title[titleName];
}
});

// 非国际化设置
// 监听路由成功时触发
$rootScope.$on('$stateChangeSuccess', function (toState) {
// 当路由存在title,动态变更当前的title name
if(toState.title) {
document.title = toState.title;
}
});


二、vue2.0动态修改网页title

1、route的index.js文件中设置routes路由规则,设置meta

import Vue from 'vue'
import Router from 'vue-router'
import Home from '../views/Home.vue'

Vue.use(Router)

const router = new Router({
mode: 'history', // hash或者history模式 /#/ 和 /
base: 'v1', // 路由前面的 如:/v1/login
routes: [
{
path: '/',
name: 'login',
redirect: '/home', // 路由重定向
component: Home // 视图组件
},
{
path: '/about',
name: 'about',
component: () => import(/* webpackChunkName: "about" */ '../views/About.vue'), // 对应组件
children: [ // 子路由 如/about/profile
{
path: '/profile',
component: () => import('../views/vuexuse/index.vue'),
meta: { // 国际化title设置
title: { zh: '个人资料', en: 'profile' }
},
meta: { // 非国际化title设置
title: '个人资料'
}
}
]
}

2、在全局后置钩子设置对应的title name

// 国际化设置

import 'Cookie' from 'js-cookie'
router.afterEach((to, from) => {
  Vue.nextTick(()=>{
    const titleName = Cookie.get('pa_lang) || 'zh';  //国际化获取当前为中还是英,
不一定是保存在cookie,有些会保存在sessionStorage中
    // 当存在title和中/英时,在修改title
    if (to.meta.title && titleName) {
      document.title = to.meta.title[titleName];    }
  })
})

// 非国际化设置

router.afterEach((to, from) => {
  Vue.nextTick(()=>{
    // 当存在title时,在修改title
    if (to.meta.title) {
      document.title = to.meta.title;
    }   
  })
})