【问题标题】:Render a functional child component dynamically动态渲染功能子组件
【发布时间】:2023-04-11 07:31:01
【问题描述】:

我需要渲染从函数返回的组件(即动态创建的)。

我的问题是,我该怎么做?

我曾尝试在父组件中做这样的事情:

<template>
  ...
  <component :is="aboutUsParagraphs()" />
</template>

函数调用将返回一个这样创建的函数组件:

Vue.component("app-about-us", {
  functional: true,
  render(createElement: CreateElement) {
    return createElement("div",
               createElement("p", ["Something about us"]));
  }
});

这编译得很好,我在控制台中没有任何错误,但是当我查看 DOM 时,我只看到一个空的 div 元素。

我错过了什么?

谢谢!

附:我还希望能够使用v-for 指令来呈现这些类型的组件的数组,因此最优选允许这样做的解决方案。再次感谢。

【问题讨论】:

    标签: typescript vuejs2


    【解决方案1】:
    <div id="dynamic-component-demo" class="demo">
      <template>
        <component :is="aboutUsParagraphs()" />
      </template>
    </div>
    
    <script src="vue.js"></script>
    <script>
    
      new Vue({
        el: '#dynamic-component-demo',
        data: {
        },
        methods: {
            aboutUsParagraphs(){
              return Vue.component("app-about-us", {
                  functional: true,
                  render(createElement) {
                    return createElement("div",
                      [createElement("p", ["Something about us"])]);
                  }
              });
            }
        }
      })
    </script>
    

    这对我有用。 createElement 函数的参数可以参考https://vuejs.org/v2/guide/render-function.html#createElement-Arguments。

    此外,:is 的值应该是字符串或选项对象,如下所述: https://vuejs.org/v2/guide/components.html#Dynamic-Components 所以代替上面的代码,下面应该会更好。

      new Vue({
        el: '#dynamic-component-demo',
        data: {
        },
        methods: {
            aboutUsParagraphs(){
              return {
                functional: true,
                render(createElement) {
                  return createElement("div",
                    [createElement("p", ["Something about us"])]);
                }
              }
            }
        }
    

    【讨论】:

    • 所以从您发布的内容来看,我的错误似乎是没有将component 部分包装在template 标签中,因为您在该问题中看到的template 部分不是针对父母的孩子,你可以从那里的波浪号看出。我会试试你的建议,谢谢
    • 没问题:) 我想这更多的是关于 createElement 参数。当我将字符串放入数组时,它工作正常。
    • 就是这样!数组是问题所在。我没注意。感谢您的帮助
    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2019-03-24
    • 2020-03-26
    • 2019-08-18
    • 2018-03-24
    • 2016-05-06
    相关资源
    最近更新 更多