如何在Vue 3中使用Vue.compile?

gdx19jrr  于 2023-11-21  发布在  Vue.js
关注(0)|答案(3)|浏览(196)

如何在Vue 3运行时使用Vue.$compile编译函数?我使用Vue 2中的函数。例如:

Vue.compile('<custom-component />');

字符串

pu3pd22g

pu3pd22g1#

import {compile} from "vue"

compile('<custom-component />')

字符串
就这样,几乎一样!
那么你可以做

render() {
  return h({render: compile('<custom-component />')})
}


一旦您无法为模板指定导入,如果它包含自定义组件,则必须在启动时使用app.component函数预先注册这些组件:vuejs.org/api/application.html#app-component

kknvjkwl

kknvjkwl2#

下面是我使用的组件代码

<template>
  <component v-if="component" :is="component" :="$attrs"/>
  <slot v-else></slot>
</template>

<script setup lang="ts">
import {compile, type Component, computed} from 'vue'

export interface Props {
  template?: string
}
const props = defineProps<Props>()

const component=computed(() => (props.template?{render : compile(props.template) }:undefined) as Component)

</script>

字符串
如果没有模板,则插槽是一个后备。组件对模板更改做出React

nukf8bse

nukf8bse3#

您可以使用renderh(创建VNode)函数:

import { render, h } from 'vue'
import Foo from "../components/Foo.vue"

function makeAFoo(props) {
  const vueComponent = h(Foo, props);
  const el = document.createElement('div')
  render(vueComponent, el)

  document.body.appendChild(el) // append it where you want 
}

字符串
类似问题:Vue 3 Append Component to the DOM: Best Practice

相关问题