Vue js3从服务器呈现动态组件模板

gcmastyq  于 2023-03-31  发布在  Vue.js
关注(0)|答案(1)|浏览(198)

我在使用Vue 3时遇到了问题,从CDN使用vue。我想使用服务器生成的模板,模板被更改但方法和数据没有绑定。

<script>
// reproduction of the issue in vue3 vite
import { compile, computed, h } from 'vue/dist/vue.esm-bundler'; // vite
// import { compile, computed, h } from 'vue/dist/vue.esm-bundler'; // webpack

export default {
  data() {
    return {
      htmlTemplate: '<span @click="test()">this is a test {{ testVariable }}</span>', // This is a test from what would be loaded from the server
      testVariable: 'test variable',
    }
  },
  methods: {
    test() {
      console.log('test');
    }
  },
  render() {
    const textCompRef = computed(() => ({ render: compile(this.htmlTemplate) }));
    console.log('textCompRef', textCompRef);
    return h(textCompRef.value);
  }
}
</script>

当我点击this is a testthenvue@3:1807 Uncaught TypeError:测试不是函数
有人能给我指个路吗?先谢了
我尝试在创建生命周期中使用.$options.template = response来设置模板,该服务器在第三次单击时工作,并且在加载新模板时没有更改。

kx7yvsdv

kx7yvsdv1#

我一直在纠结这个问题。在这里找到了答案:
Can I load the component template dynamically
.bind是关键。在您的情况下,它看起来像:

render() {
        if (this.htmlTemplate) {                
            return h(compile(this.htmlTemplate, {}).bind(this))
        }
        return h('div', 'Loading...')
    },

相关问题