From b350098f442be1b8143b44e09e735179676f755c Mon Sep 17 00:00:00 2001 From: vben Date: Tue, 27 Oct 2020 22:48:08 +0800 Subject: [PATCH] perf: adjust the logic of --- CHANGELOG.zh_CN.md | 5 +++ src/router/guard/index.ts | 14 +++++++-- src/router/guard/pageTitleGuard.ts | 39 ------------------------ src/utils/browser.ts | 29 ++++++++++++++++++ src/views/demo/feat/tab-params/index.vue | 6 +++- 5 files changed, 50 insertions(+), 43 deletions(-) delete mode 100644 src/router/guard/pageTitleGuard.ts diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 011408e9..14fa81a7 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -12,6 +12,10 @@ - 依赖更新 - 文档更新 +### ⚡ Performance Improvements + +- `setTitle`逻辑调整 + ### ✨ Refactor - 独立出`vite-plugin-html`,并修改相关插入 html 的逻辑 @@ -19,6 +23,7 @@ ### 🐛 Bug Fixes - 修复热更新时多次注册组件警告问题 +- 修复登录后出现登录标签页 ## 2.0.0-rc.5 (2020-10-26) diff --git a/src/router/guard/index.ts b/src/router/guard/index.ts index 9c71d44b..b306e354 100644 --- a/src/router/guard/index.ts +++ b/src/router/guard/index.ts @@ -2,14 +2,14 @@ import type { Router } from 'vue-router'; import { Modal, notification } from 'ant-design-vue'; import { AxiosCanceler } from '/@/utils/http/axios/axiosCancel'; -import { createPageTitleGuard } from './pageTitleGuard'; import { createProgressGuard } from './progressGuard'; import { createPermissionGuard } from './permissionGuard'; import { createPageLoadingGuard } from './pageLoadingGuard'; import { useSetting } from '/@/hooks/core/useSetting'; import { getIsOpenTab, setCurrentTo } from '/@/utils/helper/routeHelper'; +import { setTitle } from '/@/utils/browser'; -const { projectSetting } = useSetting(); +const { projectSetting, globSetting } = useSetting(); export function createGuard(router: Router) { const { openNProgress, closeMessageOnSwitch, removeAllHttpPending } = projectSetting; let axiosCanceler: AxiosCanceler | null; @@ -33,8 +33,16 @@ export function createGuard(router: Router) { setCurrentTo(to); return true; }); + + router.afterEach((to) => { + // change html title + + setTimeout(() => { + setTitle(to.meta.title, globSetting.title); + }, 0); + }); + openNProgress && createProgressGuard(router); createPermissionGuard(router); - createPageTitleGuard(router); createPageLoadingGuard(router); } diff --git a/src/router/guard/pageTitleGuard.ts b/src/router/guard/pageTitleGuard.ts deleted file mode 100644 index e6c4c14d..00000000 --- a/src/router/guard/pageTitleGuard.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { Router } from 'vue-router'; - -import { useSetting } from '/@/hooks/core/useSetting'; - -/** - * 设置页面标题 - * @param {*} title :页面标题 - */ -const setDocumentTitle = (title: string) => { - document.title = title; - const ua = navigator.userAgent; - const regex = /\bMicroMessenger\/([\d.]+)/; - // 兼容 - if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) { - const i = document.createElement('iframe'); - i.src = '/favicon.ico'; - i.style.display = 'none'; - i.onload = function () { - setTimeout(function () { - i.remove(); - }, 9); - }; - document.body.appendChild(i); - } -}; -export const createPageTitleGuard = (router: Router) => { - router.beforeEach(async (to) => { - // This operation does not require synchronization - setTimeout(() => { - const { globSetting } = useSetting(); - if (to.meta.title) { - const { title } = globSetting; - const _title = to.meta.title ? ` ${to.meta.title}-${title} ` : `${title}`; - setDocumentTitle(_title); - } - }, 30); - return true; - }); -}; diff --git a/src/utils/browser.ts b/src/utils/browser.ts index 93e6f4e7..0b7ed544 100644 --- a/src/utils/browser.ts +++ b/src/utils/browser.ts @@ -70,3 +70,32 @@ export function isFirefoxFn() { export function isOperaFn() { return type === 'Opera'; } + +/** + * set page Title + * @param {*} title :page Title + */ +const setDocumentTitle = (title: string) => { + document.title = title; + const ua = navigator.userAgent; + const regex = /\bMicroMessenger\/([\d.]+)/; + // 兼容 + if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) { + const i = document.createElement('iframe'); + i.src = '/favicon.ico'; + i.style.display = 'none'; + i.onload = function () { + setTimeout(function () { + i.remove(); + }, 9); + }; + document.body.appendChild(i); + } +}; + +export function setTitle(title: string, appTitle?: string) { + if (title) { + const _title = title ? ` ${title}-${appTitle} ` : `${appTitle}`; + setDocumentTitle(_title); + } +} diff --git a/src/views/demo/feat/tab-params/index.vue b/src/views/demo/feat/tab-params/index.vue index 0c5cdb7c..0cc02022 100644 --- a/src/views/demo/feat/tab-params/index.vue +++ b/src/views/demo/feat/tab-params/index.vue @@ -1,10 +1,14 @@