基于Vue的SPA動(dòng)態(tài)修改頁面title的方法(推薦)
最近基于VUE做個(gè)SPA手機(jī)端web發(fā)現(xiàn)動(dòng)態(tài)修改頁面標(biāo)題通過document.title=xxxx
來修改著實(shí)蛋疼,而且在IOS的微信端據(jù)說沒效果。百度發(fā)現(xiàn)要針對IOS的微信做點(diǎn)額外的操作,即:創(chuàng)建一個(gè)隱藏的Iframe,然后隨便加載一個(gè)圖片文件,然后加載完成移除,這樣就能修改頁面title了。網(wǎng)上有幾種方案:
1,App.Vue里面設(shè)置title屬性,然后頁面title去綁定,所有子組件修改標(biāo)題就通過 this.$root.data.title=xxxxx
;去修改
缺點(diǎn):App.Vue默認(rèn)的el只是body的一個(gè)DIV,這樣干需要綁定整個(gè)html
2,通過自定義指令實(shí)現(xiàn)
Vue.directive('title', { inserted: function (el, binding) { document.title = el.innerText el.remove() } })
調(diào)用方法: <div v-title>標(biāo)題內(nèi)容</div>
優(yōu)點(diǎn):這樣自定義程度較大(暫且不討論IOS微信端是否能修改成功)
缺點(diǎn):無法滿足某些JS方法中修改頁面標(biāo)題的需求,例如頁面為一個(gè)websocket的頁面,收到消息要?jiǎng)討B(tài)顯示頁面標(biāo)題這時(shí)候頻繁去修改div綁定的text并不恰當(dāng)
針對網(wǎng)上查到的上面兩種方法,我進(jìn)行了合并,利用vue的插件實(shí)現(xiàn)SPA的頁面標(biāo)題修改:
var plugin={}; plugin.install=function(Vue,options){ Vue.prototype.$title=function(title){ document.title=title; var iframe=document.createElement("iframe"); iframe.style.display='none'; iframe.setAttribute('src','/e.png'); var loadedCallback=()=>{ iframe.removeEventListener('load',loadedCallback); document.body.removeChild(iframe); }; iframe.addEventListener('load',loadedCallback); document.body.appendChild(iframe); }; }; module.exports=plugin;
調(diào)用方法: this.$title('xxxxxx');
當(dāng)然你可以替換為一個(gè)綁定的變量,然后watch進(jìn)行實(shí)時(shí)調(diào)整。
ps:Vue Spa切換頁面時(shí)更改標(biāo)題
在Vue組件化開發(fā)過程中,因?yàn)槭菃雾撁骈_發(fā),但是有時(shí)候需要頁面的title根據(jù)情況改變,于是上網(wǎng)查了一下,各種說法花(wo)里(kan)胡(bu)哨(dong), 于是想到一個(gè)黑科技 documet.title="xxx";
隨便創(chuàng)建一個(gè)項(xiàng)目,在獨(dú)立的模塊中,created在鉤子函數(shù)啟動(dòng)之后document.title='標(biāo)題'; 但是據(jù)說在IOS的微信下是無效的,雖然用蘋果機(jī)測試過有用,但是想到這樣會(huì)影響我的代碼潔癖。
<script> export default { data(){ return{ } }, created(){ document.title="首頁" }, } </script>
于是在github上找到一個(gè)好用的東西 vue-wechat-title
通過 npm install vue-wechat-title
安裝
引入需要的vue-router與頁面需要的組件之后
const router = new VueRouter({ mode: 'history', routes:[ { name: 'index', path: '/', meta: { title: '首頁' }, component: index }, { name: 'root', path: '/root', meta: { title: '肉特' }, component: root } ] }); Vue.use(require('vue-wechat-title')); //實(shí)例化參數(shù)
在組件中頂部添加一段 <div v-wechat-title="$route.meta.title"></div>
即可實(shí)現(xiàn)改變title效果。
- 詳解vuex中的this.$store.dispatch方法
- Vue實(shí)現(xiàn)數(shù)據(jù)表格合并列rowspan效果
- 在Vuex使用dispatch和commit來調(diào)用mutations的區(qū)別詳解
- Vue.js實(shí)現(xiàn)一個(gè)SPA登錄頁面的過程【推薦】
- vue中SPA單頁面應(yīng)用程序詳解
- 詳解vue 單頁應(yīng)用(spa)前端路由實(shí)現(xiàn)原理
- 淺談Vue SPA 首屏加載優(yōu)化實(shí)踐
- VUE解決微信簽名及SPA微信invalid signature問題(完美處理)
- Vue SPA 路由跳轉(zhuǎn)無法回到頂部問題排查與解決
相關(guān)文章
antd+vue實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證循環(huán)屬性表單的思路
今天通過本文給大家分享antd+vue實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證循環(huán)屬性表單的思路,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-09-09京東 Vue3 組件庫支持小程序開發(fā)的詳細(xì)流程
這篇文章主要介紹了京東 Vue3 組件庫支持小程序開發(fā)的詳細(xì)流程,通過引入NutUI,即可在項(xiàng)目中使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-06-06Vue El-descriptions 描述列表功能實(shí)現(xiàn)
這篇文章主要介紹了Vue El-descriptions 描述列表功能實(shí)現(xiàn),Descriptions 描述列表,列表形式展示多個(gè)字段,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05Vue之使用mockjs生成模擬數(shù)據(jù)案例詳解
這篇文章主要介紹了Vue之使用mockjs生成模擬數(shù)據(jù)案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09淺談Vue.js中如何實(shí)現(xiàn)自定義下拉菜單指令
這篇文章主要介紹了淺談Vue.js中如何實(shí)現(xiàn)自定義下拉菜單指令,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01@vue/cli4.x版本的vue.config.js常用配置方式
這篇文章主要介紹了@vue/cli4.x版本的vue.config.js常用配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05