gpt4 book ai didi

javascript - Vue.js 相当于 appendChild 动态添加新元素/组件?

转载 作者:行者123 更新时间:2023-12-03 06:45:59 27 4
gpt4 key购买 nike

在 Vue.js 中,我有一个 var app = new Vue({...});我有一个组件 Vue.component('mycomponent', ...我可以通过直接添加 <mycomponent></mycomponent> 来毫无问题地使用此类组件在 html 中。我希望做的是在单击按钮后或发生其他此类事件时按需动态添加这些组件。在原始 JS 中,我会使用 document.createElement...当事件触发然后执行 el.appendChild..将其添加到 html 中。我将如何对 Vue.js 做同样的事情?

我没有对节点 js 做任何花哨的事情。这是在一个带有 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> 的 html 页面上。在 <head> .

最佳答案

要做到这一点,“Vue 方式”通常涉及使用 v-if , v-for <component> ,取决于你想做什么:

  • 使用v-if根据条件有条件地显示组件/元素。
  • 使用v-for呈现组件/元素的列表。
  • 使用<component>渲染动态组件/元素。

  • 因此,要实现您在问题中描述的内容,您可以声明一个 bool 数据属性 visible像这样:
    data() {
    return {
    visible: false
    }
    }
    并与 v-if 一起使用控制模板中组件的可见性:
    <mycomponent v-if="visible"></mycomponent>
    这要求 <mycomponent>预先存在于模板中。如果您不知道要显示哪种组件,则可以在模板中包含每种可能性并根据某些条件显示您想要的:
    <comp1 v-if="comp1Visible"></comp1>
    <comp2 v-if="comp2Visible"></comp2>
    <comp3 v-if="comp3Visible"></comp3>
    或者您可以使用 <component>与另一个数据属性 ( comp ) 一起,您可以将其设置为要显示的组件的名称:
    <component v-if="visible" :is="comp"></component>
    您所描述的( document.createElement 后跟 el.appendChild )在 Vue 中不存在。 Vue 有一个严格的渲染机制,你需要使用它;动态实例化组件并将它们随机插入 DOM 是不可能的。技术上你可以做 comp = new Vue()相当于 document.createElement然后 el.appendChild(comp.$el) ,但这可能不是您想要做的,因为您将创建一个独立的 Vue 实例,您必须手动管理它,而没有简单的方法来传递数据。

    关于javascript - Vue.js 相当于 appendChild 动态添加新元素/组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59701547/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com