【问题标题】:Generate HTML with Tag from provided data json/array从提供的数据 json/array 生成带有标签的 HTML
【发布时间】:2019-06-08 17:28:51
【问题描述】:

我想使用来自json/array 的标记生成 HTML,其中可能包含子级中的任意数量的子级等等,我想基于提供的数组/json 生成复杂的嵌套 HTML 标记。 我已经调查过了 How to create dynamic tag based on props with Vue 2

但我不明白要制作一个组件/系统,该组件/系统将在子属性中挖掘多个子项以生成 HTML 标记。

请查看我创建的 codepen 示例: Codepen Sample

【问题讨论】:

  • 请在您的实际问题中包含代码笔中的逻辑。不要让试图帮助你的人必须去辅助站点才能看到你的逻辑
  • 您应该将代码作为有效的minimal reproducible example 添加到您的问题中,而不是指向外部站点的链接。
  • 谢谢,但我认为如果我提供一些示例代码会有所帮助。记下 下次会跟进。 :)

标签: javascript vue.js vuejs2 vue-component


【解决方案1】:

Vue.js render function 应该满足你的要求。使用它,您可以递归遍历数组,创建所有 DOM 元素。请看演示:

Vue.config.devtools = false;
Vue.config.productionTip = false;

new Vue({
  el: '#demo',
  data () {
    return {
      items: [
        {
          id: 6568,
          tag: 'h1',
          mesg: '1',
          child: [
            {
              id: 6569,
              tag: 'h2',
              mesg: 11,
              child: [
                {
                  id: 6570,
                  tag: 'h4',
                  mesg: '111',
                  child: []
                }
              ]
            },
            {
              id: 99777,
              tag: 'p',
              mesg: 1123
            }
          ]
        },
        {
          id: 56565,
          tag: 'p',
          mesg: '6568985',
          child: []
        }
      ]
    }
  },
  render: function (createElement) {
    const renderNode = item => {
      const children = [item.mesg];
      if (item.child && Array.isArray(item.child)) {
        children.push(...item.child.map(renderNode))
      }
      return createElement(item.tag, children)
    }
    return createElement('div', this.items.map(renderNode));
  },
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo"></div>

【讨论】:

  • @Ahadul 嗨,感谢您的反馈 :) 如果您觉得有帮助,请接受答案,谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2012-03-26
  • 2017-10-24
  • 2017-07-11
  • 2014-06-29
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多