Vuejs中使用markdown服务器端渲染的示例


Posted in Javascript onNovember 22, 2017

啊哈,又是来推荐一个 vuejs 的 package,miaolz123/vue-markdown。 对应的应用场景是:你想使用一个编辑器或者是在评论系统中支持 markdown。这个 package 的有点还是挺多了,比如默认就支持 emoji,这个就很完美啦!laravist 的新版就使用了 vue-markdown 来渲染评论。

安装

直接使用 npm 来安装:

npm install --save vue-markdown

使用

也是很简单的,可以直接这样:

import VueMarkdown from 'vue-markdown'

new Vue({
 components: {
  VueMarkdown
 }
})

或者是这样,举一个具象化的例子是:比如我们有一个 Comment.vue 组件用来渲染评论,可以在这个组件中直接指明:

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
}

然后在渲染的时候这个:

<div class="comments">
 <div class="comments" v-for="comment in comments">
  <comment :comment="comment">
  </comment>
 </div>
</div>

这里我们首先通过 comment props 传入整个 comment(这个comment其实就是一个对象) ,然后在 Comment.vue 通过 :source 来给 veu-markdown 组件传入每个评论的 body 字段内容,注意这里的 comment.body 在数据库中保存的就是评论的 markdown 格式的内容。

Vuejs服务器端渲染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>`
    });
    // 其他变量设置
    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>

总结

本文介绍的 vue-markdown 在某些应用场景中其实超级好用,特别是对于评论系统想支持 markdown 这个需求来说,容易集成,优点多多。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
判断是否安装flash player及当前版本的JS代码
Aug 08 Javascript
原生js操作checkbox用document.getElementById实现
Oct 12 Javascript
jquery如何根据值设置默认的选中项
Mar 17 Javascript
AngularJS入门心得之directive和controller通信过程
Jan 25 Javascript
盘点javascript 正则表达式中 中括号的【坑】
Mar 16 Javascript
JQuery validate插件验证用户注册信息
May 11 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
React组件之间的通信的实例代码
Jun 27 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
Sep 01 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
javascript面向对象程序设计实践常用知识点总结
Jul 29 Javascript
微信小程序图片右边加两行文字的代码
Apr 23 Javascript
浅谈Vue-cli 命令行工具分析
Nov 22 #Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
Nov 22 #Javascript
深入理解Vue官方文档梳理之全局API
Nov 22 #Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 #Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
Nov 22 #Javascript
基于JavaScript实现表格滚动分页
Nov 22 #Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
Nov 22 #Javascript
You might like
处理php自动反斜杠的函数代码
2010/01/05 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
新浪的图片新闻效果
2007/01/13 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
python版大富翁源代码分享
2018/11/19 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
python 画条形图(柱状图)实例
2020/04/24 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
水果花束:Fruit Bouquets
2017/12/20 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
软件测试企业面试试卷
2016/07/13 面试题
小孩百日宴答谢词
2014/01/15 职场文书
求职简历自荐信
2014/06/18 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
美丽心灵观后感
2015/06/01 职场文书
Python经常使用的一些内置函数
2022/04/11 Python