vue中展示、讀取.md?文件的方法(批量引入、自定義代碼塊高亮樣式)
1.首先安裝以下依賴
- vue-markdown-loader
- vue-loader
- vue-template-compiler
- github-markdown-css
- highlight.js
npm install vue-markdown-loader -D npm install vue-loader -D npm install vue-template-compiler -D npm install github-markdown-css -D npm install highlight.js -D
2.在 vue.config.js 文件中配置 webpack
module.exports = { chainWebpack: (config) => { config.module .rule("md") .test(/\.md/) .use("vue-loader") .loader("vue-loader") .end() .use("vue-markdown-loader") .loader("vue-markdown-loader/lib/markdown-compiler") .options({ raw: true, }); }, };
3.組件中使用時
單個文件使用可在組件內單獨引用
main.js 中引入樣式
// markdown樣式 import "github-markdown-css"; // 代碼高亮 import "highlight.js/styles/github.css"; //默認樣式
- vue 組件中使用
- 將 md 文件作為組件導入,注意:class 的值必須包含 markdown-body ,否則樣式無法生效!
<template> <demo-md class="markdown-body"></demo-md> </template> <script> import DemoMd from './demo.md'; export default { components: { DemoMd } } </script>
批量導入多個文件
在 md 文件同目錄中創(chuàng)建 index.js 文件,導入 md 文件
// md文件批量引入 import javaScript_prototype from "./javaScript_prototype.md"; import git_basics from "./git_basics.md"; import click_copy from "./click_copy.md"; // 創(chuàng)建md組件同時設置文章其他信息,單獨導出使用 export const components = { click_copy: { id: 3, name: click_copy, type: ["html", "javaScript", "vue"], describe: "JavaScript頁面點擊復制功能(vue)", date: "2021-11-23 15:51:00", }, git_basics: { id: 2, name: git_basics, type: ["git"], describe: "git 基礎使用(創(chuàng)建、推送、克隆、拉取、常用指令等)", date: "2021-11-23 14:22:00", }, javaScript_prototype: { id: 1, name: javaScript_prototype, type: ["javaScript"], describe: "個人對 javaScript 原型鏈理解", date: "2021-11-22 10:00:00", }, }; // 注冊全部md組件 export const mdArticle = function (Vue, opts = {}) { Object.keys(components).forEach((key) => { Vue.component(key, components[key].name); }); };
在 main.js 文件中引入剛剛創(chuàng)建的 index.js 文件,導出全部 me 組件,全局注冊
引入markdown樣式和高亮樣式
// markdown樣式 import "github-markdown-css"; // 代碼高亮 import "highlight.js/styles/github.css"; //默認樣式 // 代碼高亮devibeans swh自定義顏色 // import './assets/css/swh.css' //自定義樣式 // 引入md文章組件列表 import { mdArticle } from "./article/index"; Vue.use(mdArticle);
自定義代碼代碼塊高亮樣式(文件中自行修改顏色)
創(chuàng)建 css 文件
/* 代碼塊高亮樣式 */ pre code.hljs { display: block; overflow-x: auto; padding: 1em; } code.hljs { padding: 3px 5px; } .hljs { color: #eaeaea; background: #000; } .hljs-subst { color: #eaeaea; } .hljs-emphasis { font-style: italic; } .hljs-strong { font-weight: 700; } .hljs-type { color: #eaeaea; } /* 參數(shù) */ .hljs-params { color: #ea00ff; } /* true顏色 */ .hljs-literal, .hljs-name, .hljs-number { color: rgb(105, 195, 255); font-weight: bolder; } /* 注釋顏色 */ .hljs-comment { color: #8a8a8a; } .hljs-quote, .hljs-selector-id { color: #0ff; } /* 函數(shù)顏色 */ .hljs-template-variable, .hljs-title, .hljs-variable { color: #c3bf7b; font-weight: 700; } /* 對象顏色 */ .hljs-keyword, .hljs-selector-class, .hljs-symbol { color: #9d6bb4; } /* 值的顏色 */ .hljs-bullet, .hljs-string { color: rgb(255, 142, 66); } .hljs-section, .hljs-tag { color: rgb(105, 195, 255); } .hljs-selector-tag { color: #000fff; font-weight: 700; } .hljs-attribute, .hljs-built_in, .hljs-link, .hljs-regexp { color: rgb(105, 195, 255); } .hljs-meta { color: #fff; font-weight: bolder; }
App.vue 可直接覆蓋(代碼塊背景色、代碼括號顏色)
<style lang="less"> #app { font-family: "楷體"; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; color: #2c3e50; .markdown-body .highlight pre, .markdown-body pre { background-color: rgb(34, 34, 34); // 代碼塊背景色改變默認 color: rgb(105, 195, 255); //代碼括號顏色 } } </style>
組件中直接使,可以根據(jù) parameter 動態(tài)顯示 md 文件
- 將 md 文件作為組件導入,注意:class 的值必須包含 markdown-body ,否則樣式無法生效!
- parameter 是文章 md 組件名稱,通過列表點擊傳遞 name,實現(xiàn)動態(tài)顯示 md 組件
<template> <div class="markdown-body"> <!-- 文章詳情頁面 --> <div class="details"> <!-- md文件組件 --> <component :is="parameter"></component> </div> </div> </template> export default { data() { return { parameter: "", //文章對應組件名字 }; }, mounted() { this.getParameters(); }, methods: { getParameters() { // 獲取文章參數(shù) 點擊跳轉獲取參數(shù) 或者 刷新頁面從url中獲取參數(shù) this.parameter = this.$route.query.article || location.search.split("=")[1]; }, }, };
效果展示
點擊 md 文件列表
進入md 文件詳情頁面
到此這篇關于vue中展示、讀取.md 文件的方法(批量引入、自定義代碼塊高亮樣式)的文章就介紹到這了,更多相關vue展示、讀取.md 文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue開發(fā)移動端使用better-scroll時click事件失效的解決方案
這篇文章主要介紹了vue開發(fā)移動端使用better-scroll時click事件失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Vue3之Vite中由element?ui更新導致的啟動報錯解決
這篇文章主要介紹了Vue3之Vite中由element?ui更新導致的啟動報錯解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01解決vue無法加載文件D:\Program Files\nodejs\node_global\vue.ps1,
這篇文章主要給大家介紹了關于解決vue無法加載文件D:\Program Files\nodejs\node_global\vue.ps1,因為在此系統(tǒng)上禁止運行腳本的相關資料,這個報錯是由于在系統(tǒng)上禁止運行腳本導致的,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-01-01vue中循環(huán)多個li(表格)并獲取對應的ref的操作代碼
我想要獲取每一個循環(huán)并獲取每一個li(或者其它循環(huán)項)的ref,以便于后續(xù)的操作,接下來通過本文給大家分享vue中循環(huán)多個li(表格)并獲取對應的ref的操作代碼,感興趣的朋友跟隨小編一起看看吧2024-02-02解決Vue中引入swiper,在數(shù)據(jù)渲染的時候,發(fā)生不滑動的問題
今天小編就為大家分享一篇解決Vue中引入swiper,在數(shù)據(jù)渲染的時候,發(fā)生不滑動的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09