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 相关文章推荐
JS类定义原型方法的两种实现的区别评论很多
Sep 12 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
Jan 24 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
jquery easyui使用心得
Jul 07 Javascript
使用jquery.qrcode生成彩色二维码实例
Aug 08 Javascript
JQuery 使用attr方法实现下拉列表选中
Oct 13 Javascript
jQuery事件绑定与解除绑定实现方法
Apr 15 Javascript
AngularJs实现ng1.3+表单验证
Dec 10 Javascript
jQuery animate easing使用方法图文详解
Jun 17 Javascript
bootstrap weebox 支持ajax的模态弹出框
Feb 23 Javascript
jQuery实现输入框的放大和缩小功能示例
Jul 21 jQuery
原生JavaScript实现随机点名表
Jan 14 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/10/12 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
python操作CouchDB的方法
2014/10/08 Python
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
在Python中COM口的调用方法
2019/07/03 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
Python几种常见算法汇总
2020/06/02 Python
会计电算化个人求职信范文
2014/01/24 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
公司会计岗位职责
2014/02/13 职场文书
领导调研接待方案
2014/02/27 职场文书
项目建议书模板
2014/05/12 职场文书
学习计划书怎么写
2014/09/15 职场文书
小学班主任个人总结
2015/03/03 职场文书
叶问观后感
2015/06/15 职场文书
运动会广播稿100字
2015/08/19 职场文书