vue 中各個組件添加標題

来源:http://www.cnblogs.com/blackin/archive/2017/12/05/7988466.html
-Advertisement-
Play Games

寫在前面: 最近公司在做微信公眾號的開發,我的任務是在微信服務號中嵌套第三方頁面,也就是公司自己負責的頁面,技術我選的是vue,應為在之前的開發經歷中並沒有使用過vue,這也是一次新的嘗試,當然在開發過程中會遇到一系列之前沒有遇到的問題,不過這不是重點,只要有解決問題的那一刻就非常心滿意足了。 因為 ...


寫在前面:

     最近公司在做微信公眾號的開發,我的任務是在微信服務號中嵌套第三方頁面,也就是公司自己負責的頁面,技術我選的是vue,應為在之前的開發經歷中並沒有使用過vue,這也是一次新的嘗試,當然在開發過程中會遇到一系列之前沒有遇到的問題,不過這不是重點,只要有解決問題的那一刻就非常心滿意足了。

因為vue的特性,頁面與頁面之間是通過路由的改變來請求ajax的,所以,瀏覽器是不會產生刷新行為的,所以,在“不同的頁面”之間添加不同的標題也是一個問題,我在網上查閱了些資料後,發現問題確實是可以解決的。

主要思路:

  在網上查閱了很多資料後發現,主要思路是通過路由的改變,在路由配置里添加不同路由頁面的meta屬性:

  1 /*實例化vue-router*/
  2 var router = new VueRouter({
  3 	linkActiveClass:'mui-active',
  4 	routes:[
  5 		{
  6 			path:'/',redirect:"/course/courseList",
  7 		},
  8 		{
  9 			path:'/course/courseList',
 10 			component:courseList,
 11 			name:"全部課程",
 12 			meta:{
 13 				title:"全部課程"
 14 			}
 15 		},
 16 		{
 17 			path:'/course/courseInfo/:courseId',
 18 			component:courseInfo
 19 		},
 20 		{
 21 			path:'/course/myCourse',
 22 			component:myCourse,
 23 			name:"我的課桌",
 24 			meta:{
 25 				title:"我的課桌"
 26 			}
 27 		},
 28 		{
 29 			path:'/personal/personalCenter/:studentId',
 30 			component:personalCenter,
 31 			name:"個人中心",
 32 			meta:{
 33 				title:"個人中心"
 34 			}
 35 		},
 36 		{
 37 			path:'/personal/personalInfo',
 38 			component:personalInfo,
 39 			name:"個人信息",
 40 			meta:{
 41 				title:"個人信息"
 42 			}
 43 		},
 44 		{
 45 			path:'/personal/learningRecord',
 46 			component:learningRecord,
 47 			name:"學習記錄",
 48 			meta:{
 49 				title:"學習記錄"
 50 			}
 51 		},
 52 		{
 53 			path:'/personal/myClass',
 54 			component:myClass,
 55 			name:"我的班級",
 56 			meta:{
 57 				title:"我的班級"
 58 			}
 59 		},
 60 		{
 61 			path:'/fuli/articleList',
 62 			component:articleList,
 63 			name:"輕友福利",
 64 			meta:{
 65 				title:"輕友福利"
 66 			}
 67 		}
 68 	]
 69 });
router

在 router 中設置完成以後還需要在router.beforeEach()中設置document.title:

  1 router.beforeEach((to, from, next) => {
  2 	if (to.meta.title) {
  3 	document.title = to.meta.title
  4 	}
  5 	next()
  6 })

router.beforeEach

這樣大概的樣式就可以出來了:

2017120517333020171205173413

但是這種效果只是適用於固定的標題,如果需要根據目標路由頁面設置不同的標題的話,這樣做就不能滿足要求了,這是就需要藉助於網上封裝的設置微信標題的方法:(setWechatTitle):具體代碼如下:

  1 const setWechatTitle = function(title) {
  2     document.title = title;
  3     let mobile = navigator.userAgent.toLowerCase();
  4     if (/iphone|ipad|ipod/.test(mobile)) {
  5         let iframe = document.createElement('iframe');
  6         iframe.style.visibility = 'hidden';
  7         let iframeCallback = function() {
  8             setTimeout(function() {
  9                 iframe.removeEventListener('load', iframeCallback)
 10                 document.body.removeChild(iframe)
 11             }, 10)
 12         };
 13         iframe.addEventListener('load', iframeCallback)
 14         document.body.appendChild(iframe)
 15     }
 16 };
 17 // 第二種修改title的方法,其中包含iframe的設置:
 18 let setTitleHack = function (t) {
 19     document.title = t;
 20     let iframe = document.createElement('iframe');
 21     iframe.style.visibility = 'hidden';
 22     iframe.style.width = '1px';
 23     iframe.style.height = '1px';
 24     // iframe.src = '//m.baidu.com/favicon.ico';
 25     iframe.onload = function () {
 26         setTimeout(function () {
 27             iframe.remove();
 28         }, 10);
 29     };
 30     document.body.appendChild(iframe);
 31 };
 32 
 33 // 在文件的最下方輸出這兩個方法:
 34 module.exports = {
 35     setWechatTitle,
 36     setTitleHack
 37 };
utils

將當前代碼引入到要設置標題的目標路由組件中,

  1 /*引入修改組件標題js*/
  2 import { setWechatTitle, setTitleHack } from '../../kits/utils.js'; 

併在created中調用該方法:

  1 created(){
  2 	this.id = this.$route.params.courseId;//獲取路由參數
  3 	setWechatTitle(this.bookInfo.title);
  4 },

這裡的“this.bookInfo.title”是通過vue-resource發送請求獲取到的,這裡我用假數據代替的(公司後臺還沒有生成介面文檔),這樣,當前的“this.bookInfo.title”就成為了當前組件的標題,而且標題會隨著title的改變而改變:

20171205174153


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:問題描述 在已經root過的android設備下,app執行一個linux命令,app需要獲取su許可權,在某些android主板下會出現異常, Command: [su] Working Directory: null Environment: null,代碼如下: 由於確認設備已經root,並 ...
  • [What's New in iOS 9.x](https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP400161 ...
  • [1]文字隱藏 [2]負縮進 [3]負margin [4]上padding [5]0寬高 [6]文本透明 [7]偽元素 [8]正縮進 [9]字體大小 ...
  • 其實這個問題在你使用vue cli構建項目的時候是不會出現的,因為你在創建項目的構建過程中已經讓你勾選了,然後會寫入 中。 這就在這,會讓你選擇Vue的構建方式。 如果你勾選 就會出現如上的配置。 其實這裡涉及到一個概念: 獨立構建:含義是,擁有完整的 和`運行時調用功能` 運行時構建:含義是,只擁 ...
  • // 提取特殊字元串長度(scrstr 源字元串 armstr 特殊字元) getStrCount: function(scrstr, armstr) { var count = 0; while (scrstr.indexOf(armstr) >= 1) { scrstr = scrstr.rep... ...
  • 摘要:之前在做一個小游戲平臺項目,有個“用戶中心”模塊,就涉及到了頭像上傳的功能。在做移動端圖片上傳的時候,傳的都是手機本地圖片,而本地圖片一般都相對比較大,拿現在的智能手機來說,平時拍很多圖片都是兩三兆的,如果直接這樣上傳,那圖片就太大了,如果用戶用的是移動流量,完全把圖片上傳顯然不是一個好辦法。 ...
  • //兩數組去除重覆數值 mergeArray: function(arr1, arr2) { for (var i = 0; i < arr1.length; i++) { for (var j = 0; j < arr2.length; j++) { if (arr1[i] === arr2[j]... ...
  • 1.首先安裝node.js環境 官網地址https://nodejs.org/en/ 文本編輯器選擇 sublime text3 (vs就算了太大) 2.建立項目 2.1 新建自己的項目文件夾 code-x 代號x計劃,放到桌面 2.2 初始化 一路回車 3 安裝vue模板,編譯運行 4 瞭解項目結 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...