自定义标记语言JSON到vue

eqoofvh9  于 2023-06-30  发布在  Vue.js
关注(0)|答案(1)|浏览(95)

我正在学习Vue,我正在构建一个简单的wiki页面。原始文章数据是用自定义标记编写的JSON文件。例如,以下标记:The ''sun'' is {r=black black}应该这样“编译”:<p>The <b>sun</b> is <Ref path="/black">black</p>我可以使用regexp和字符串操作来实现这一点,但我不能使用该字符串作为模板选项,因为它只适用于静态输入。如果它只是html,我可以使用v-html指令或其他相关的东西。我的模板获取JSON文件并根据我选择的标准解析我的自定义标记。它从中得到的是,字符串(Vue标记)不能被分配给'template'选项,因为它只接受静态字符串,不识别任何变量。
我试着将模板选项分配给编译的vue标记或使用运行时编译器。也许我错了我该怎么办?

envsm3lx

envsm3lx1#

你可以用compile()编译一个vue模板,然后用<Component>插入到你当前的模板中。另外,我们需要在vite.config.js中将别名'vue' import更改为'vue/dist/vue.esm-bundler.js'以启用此功能。

npm create vue@latest更改的文件:
App.vue

<script setup>

import { ref, compile } from 'vue';

const msg = ref('Hello world!');
const component = ref(compile('<HelloWorld :msg="msg"></HelloWorld>'));

</script>

<template>
    <main>
        <Component :is="component" :msg="msg"></Component>
    </main>
</template>

main.js

import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'

const app = createApp(App);
import HelloWorld from './components/HelloWorld.vue'
app.component('HelloWorld', HelloWorld);
app.mount('#app')

vite.config.js

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        vue(),
    ],
    resolve: {
        alias: {
            '@': fileURLToPath(new URL('./src', import.meta.url)),
            vue: 'vue/dist/vue.esm-bundler.js',
        }
    }
})

相关问题