【问题标题】:dynamic loading of a component in vuevue中组件的动态加载
【发布时间】:2018-07-08 17:23:15
【问题描述】:

我有一棵使用 vue 显示的对象树。树中的每个节点都可以是特定类型,用户可以在树中从一个节点单击到另一个节点。大多数节点可以使用默认模板呈现相同的内容。但是有些节点需要完全不同的渲染。所以我认为 id 为每个节点类型使用特定的组件。

我知道我可以使用 "component is=" 方法,但是如何根据节点的类型加载特定组件,或者如果该类型没有特定组件,则加载默认组件。有什么方法可以检查组件是否存在?或者我应该维护一些需要特定组件的所有类型的数组?

【问题讨论】:

  • “我是否应该维护一些包含所有需要特定组件的类型的数组” -> 是的

标签: vuejs2 vue-component


【解决方案1】:

正如您所提到的,您可以使用<component :is>。这是一个可能的实现:

您可以调用函数getNodeComponentByType(node),它会根据当前节点返回特定类型的组件。

例如在您的模板中(即,如果这是您渲染树节点的方式)
<component v-for="node in nodes" :is="getNodeComponentByType(node)">

并随后实现该方法,如图所示:

var vm = new Vue({
  el: '#app,
  data: {
    ...
  },
  
  methods: {
    getNodeComponentByType: function (node) {
        switch(node.type) {
            case 'typeA' : return ATypeTreeNodeComponent;
            case 'typeB': return BTypeTreeNodeComponent;
            default: return defaultTreeNodeComponent;

        }
    }
  },
  components: {
      ATypeTreeNodeComponent,
      BTypeTreeNodeComponent,
      defaultTreeNodeComponent
      ...
  }
})

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2019-06-30
    • 2018-01-09
    • 2018-05-22
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2020-12-21
    相关资源
    最近更新 更多