4

我正在使用 Evan You 的如何将 HTML 转换为 markdown 的示例 - https://jsfiddle.net/yyx990803/oe7axeab/

通过安装markednpm然后实现它会导致错误,'marked' is not defined.

如果我cdn在文件中包含链接index.html,则降价会转换为“0”,我会收到错误消息:

[Vue warn]: Property or method "marked" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.

编辑:

我试图将它包括在我main.js的如下:

import App from './App.vue';
import router from './router';
import store from './store';

import './css/main.css';
import i18n from './i18n';
import marked from 'marked';

const debugSetting = window.ApplicationConfig.DEBUG;
Vue.config.debug = debugSetting;

Vue.config.productionTip = false;

new Vue({
    router,
    store,
    i18n,
    marked,

    render: function(h) {
        return h(App);
    },
}).$mount('#app');

但这感觉不对,因此为什么我尝试使用cdnjust 看看这至少是否有效。

零件

<template>
    <main-layout>
        <div class="wrapper" v-html="terms | marked"></div>
    </main-layout>
</template>

<script>
import MainLayout from '@/layouts/Main.vue';

import { getTerms } from '../api';

export default {
    name: 'Terms',
    components: {
        MainLayout,
    },
    data() {
        return {
            terms,
        };
    },
    filters: {
        marked: marked,
    },
    async mounted() {
        try {
            const response = await getTerms();

            if (response) {
                this.terms = response.data;
                console.log(this.terms);
            }
        } catch (err) {
            console.log(err);
        }
    },
};
</script>
4

4 回答 4

3

您缺少marked导入。在全球范围内将其注入main.js将无济于事!

<template>
    <main-layout>
        <div class="wrapper" v-html="terms | marked"></div>
    </main-layout>
</template>

<script>
...
import marked from 'marked';
...
</script>
于 2019-10-03T10:03:46.567 回答
3

marked如何在全球范围内使用的示例。

main.js

import Vue from 'vue'
import App from './App.vue'

import router from './router'
import store from '@/store'

import marked from 'marked'

// Lets use the code below inside a components
// Vue.marked()
// this.$marked()
Vue.use({
  install () {
    Vue.marked = marked
    Vue.prototype.$marked = marked
  }
})

Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

一些文件.vue

<template>
    <div v-html="$marked(someMarkdownText)"></div>
</template>

export default {
    name: 'Terms',
    components: {},
    data () {
        return {
            someMarkdownText: '# hello',
        }
    },
    mounted () {}
}
于 2020-06-01T15:00:28.973 回答
1

我使用了该示例的最新版本,并且可以立即使用。

https://jsfiddle.net/yyx990803/v368d4g3/

    compiledMarkdown: function () {
      return marked(this.input, { sanitize: true })
    }
  },
于 2019-10-04T09:02:51.750 回答
1

原因是过滤器不打算在v-html指令中使用。这样做时,marked会查看组件的属性/方法,这实际上是没有声明的(因为它是一个过滤器)。

您唯一的方法是移动markeddata()甚至methods{}更好地构建一个计算属性(因此它被缓存)。

如果模板引擎中有 a是可能{{{ }}}的,但由于没有,您想要实现的目标是不可能的。


PS:您提到的示例正在运行,因为它使用的是Vue v1.0;只有更新依赖项会使小提琴失败。

于 2019-10-23T15:07:57.257 回答