Vuejs中使用markdown服務(wù)器端渲染的示例
啊哈,又是來(lái)推薦一個(gè) vuejs 的 package,miaolz123/vue-markdown。 對(duì)應(yīng)的應(yīng)用場(chǎng)景是:你想使用一個(gè)編輯器或者是在評(píng)論系統(tǒng)中支持 markdown。這個(gè) package 的有點(diǎn)還是挺多了,比如默認(rèn)就支持 emoji,這個(gè)就很完美啦!laravist 的新版就使用了 vue-markdown 來(lái)渲染評(píng)論。
安裝
直接使用 npm 來(lái)安裝:
npm install --save vue-markdown
使用
也是很簡(jiǎn)單的,可以直接這樣:
import VueMarkdown from 'vue-markdown' new Vue({ components: { VueMarkdown } })
或者是這樣,舉一個(gè)具象化的例子是:比如我們有一個(gè) Comment.vue 組件用來(lái)渲染評(píng)論,可以在這個(gè)組件中直接指明:
import VueMarkdown from 'vue-markdown'; <template> <div> <vue-markdown :source="comment.body"></vue-markdown> </div> </template> export default { // ... other codes props:['comment'], data(){ return { comment : this.comment } }, components: { VueMarkdown }, // ... other codes }
然后在渲染的時(shí)候這個(gè):
<div class="comments"> <div class="comments" v-for="comment in comments"> <comment :comment="comment"> </comment> </div> </div>
這里我們首先通過(guò) comment props 傳入整個(gè) comment(這個(gè)comment其實(shí)就是一個(gè)對(duì)象) ,然后在 Comment.vue 通過(guò) :source 來(lái)給 veu-markdown 組件傳入每個(gè)評(píng)論的 body 字段內(nèi)容,注意這里的 comment.body 在數(shù)據(jù)庫(kù)中保存的就是評(píng)論的 markdown 格式的內(nèi)容。
Vuejs服務(wù)器端渲染markdown示例
const Koa = require('koa'); const _ = require('koa-route'); const vsr = require('vue-server-renderer'); const fs = require('fs'); const indexjs = require('./component/index.js'); const Vue = require('vue'); const MD = require('markdown-it') const server = new Koa(); const route = { index: (ctx, id) => { // 解析markdown const md = new MD().render(fs.readFileSync('./markdown/' + id + '.md', 'utf-8')); // vue插入html代碼 const app = new Vue({ data: { main: md }, template: ` <div> <div class="main" v-html="main"></div> </div>` }); // 其他變量設(shè)置 const context = { htmlTitle: id }; // 加載模板html文件 const renderer = vsr.createRenderer({ template: fs.readFileSync('./template/index.template.html', 'utf-8') }); // 渲染 renderer.renderToString(app, context, (err, html) => { if (err) { ctx.response.status = 500; } else { ctx.response.body = html; } }) } }; server.use(_.get('/post/:id', route.index)); server.listen(8080);
<!DOCTYPE html> <html lang="CH-ZN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>{{htmlTitle}}</title> </head> <body> <!--vue-ssr-outlet--> </body> </html>
總結(jié)
本文介紹的 vue-markdown 在某些應(yīng)用場(chǎng)景中其實(shí)超級(jí)好用,特別是對(duì)于評(píng)論系統(tǒng)想支持 markdown 這個(gè)需求來(lái)說(shuō),容易集成,優(yōu)點(diǎn)多多。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- nodejs+axios爬取html出現(xiàn)中文亂碼并解決示例
- js+html+css實(shí)現(xiàn)簡(jiǎn)單電子時(shí)鐘
- 使用Javascript在HTML中顯示實(shí)時(shí)時(shí)間
- JS+HTML實(shí)現(xiàn)經(jīng)典游戲吃豆人
- JavaScript markdown 編輯器實(shí)現(xiàn)雙屏同步滾動(dòng)
- JavaScript+Node.js寫一款markdown解析器
- js正則匹配markdown里的圖片標(biāo)簽的實(shí)現(xiàn)
- JS加載解析Markdown文檔過(guò)程詳解
- 一文詳解JavaScript?如何將?HTML?轉(zhuǎn)成?Markdown
相關(guān)文章
buildAdmin開源項(xiàng)目引入四種圖標(biāo)方式詳解
這篇文章主要為大家介紹了buildAdmin開源項(xiàng)目引入四種圖標(biāo)方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02又一款MVVM組件 Vue基礎(chǔ)語(yǔ)法和常用指令(1)
這篇文章主要為大家分享了一款MVVM組件,詳細(xì)介紹了Vue基礎(chǔ)語(yǔ)法和常用指令,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11element-ui中select組件綁定值改變,觸發(fā)change事件方法
今天小編就為大家分享一篇element-ui中select組件綁定值改變,觸發(fā)change事件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Vue監(jiān)聽數(shù)據(jù)對(duì)象變化源碼
這篇文章主要為大家詳細(xì)介紹了Vue監(jiān)聽數(shù)據(jù)對(duì)象變化的源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03vue項(xiàng)目實(shí)現(xiàn)圖片懶加載的簡(jiǎn)單步驟
懶加載的好處在于減少服務(wù)器的壓力,在網(wǎng)絡(luò)比較慢的情況下,可以提前給這張圖片添加一個(gè)占位圖片,提高用戶的體驗(yàn),這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目實(shí)現(xiàn)圖片懶加載的相關(guān)資料,需要的朋友可以參考下2022-09-09