index.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <view>
  3. <Parser class="parse" :tag-style="tagStyle" :html="inputHTML" show-with-animation>
  4. <view class="loading">
  5. <view class="loading_wrap">
  6. <image class="image" src="./assets/loading.gif">
  7. <text>加载中...</text>
  8. </view>
  9. </view>
  10. </Parser>
  11. </view>
  12. </template>
  13. <script>
  14. import marked from './assets/marked.min.js';
  15. import hljs from './highlight.js';
  16. import Parser from "./parser/parser.vue";
  17. export default {
  18. props:{
  19. resource:{
  20. type:String,
  21. default:"**请输入markdown内容**"
  22. }
  23. },
  24. components:{
  25. Parser
  26. },
  27. data() {
  28. return {
  29. tagStyle: {
  30. // 代码块
  31. pre: 'overflow: auto;background: #f5f5f5;padding: 1em;white-space: pre;margin:1em;',
  32. },
  33. }
  34. },
  35. computed:{
  36. inputHTML(){
  37. return marked(this.resource);
  38. }
  39. },
  40. created(){
  41. // 初始化markdown高亮效果
  42. this.initHighLight();
  43. },
  44. methods: {
  45. initHighLight(){
  46. hljs.configure({useBR: true,tabReplace:' '});
  47. marked.setOptions({
  48. renderer: new marked.Renderer(),
  49. gfm: true,
  50. tables: true,
  51. breaks: false,
  52. pedantic: false,
  53. highlight: function (code, lang) {
  54. if (lang && hljs.getLanguage(lang)) {
  55. // TODO 代码块 使其高亮
  56. return hljs.highlight(lang, code, true).value;
  57. } else {
  58. return hljs.highlightAuto(code).value;
  59. }
  60. }
  61. });
  62. },
  63. }
  64. }
  65. </script>
  66. <style lang="scss">
  67. @import url('./highlight.js/styles/nnfx.css');
  68. @import url('./assets/default.css');
  69. </style>