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 相关文章推荐
对google个性主页的拖拽效果的js的完整注释[转]
Apr 10 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
May 08 Javascript
JavaScript 判断日期格式是否正确的实现代码
Jul 04 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
Mar 13 Javascript
动态更新highcharts数据的实现方法
May 28 Javascript
轻松实现jquery选项卡切换效果
Oct 10 Javascript
BootStrap Datetimepicker 汉化的实现代码
Feb 10 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 Javascript
javascript中函数的写法实例代码详解
Oct 28 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
小程序接入腾讯位置服务的详细流程
Mar 03 Javascript
jQuery中event.target和this的区别详解
Aug 13 jQuery
浅谈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/05/16 PHP
PHP中数组合并的两种方法及区别介绍
2012/09/14 PHP
PHP四大安全策略
2014/03/12 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
python 多进程通信模块的简单实现
2014/02/20 Python
利用python实现数据分析
2017/01/11 Python
Python元组及文件核心对象类型详解
2018/02/11 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
成品仓管员岗位职责
2013/12/11 职场文书
大学活动策划书范文
2014/01/10 职场文书
综合实践活动总结
2014/05/05 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书