【问题标题】:Vue Mounting Component removing divVue 挂载组件移除 div
【发布时间】:2023-04-08 16:58:01
【问题描述】:

我正在尝试在一个函数上安装一个组件,它工作正常。但是我已经对其进行了设置,以便它在 X 秒后销毁 div。然后,当我尝试再次添加组件时,它删除了基本 div。我不确定如何解决这个问题......

组件:

<template>
  <div>
    <b-alert show dismissible variant="danger">
        <i class="mdi mdi-block-helper mr-2"></i>{{ text }}
    </b-alert>
    </div>
</template>

<script>
 export default {
    name: "alertDanager",
    props: {
    text: null
    },
    created() {
        setTimeout(() => this.destoryEl(), 5000);
    },
    methods: {
        destoryEl() {
            this.$destroy();
            this.$el.parentNode.removeChild(this.$el);
        }
    }
};
</script>

中生成组件
const DangerAlertExtended = Vue.extend(dangerAlert);
const error = new DangerAlertExtended({ propsData: { text: "Error message" } });
error.$mount("#error");

我不知道如何让它停止覆盖#error div...

【问题讨论】:

    标签: vue.js vue-component


    【解决方案1】:

    为什么不让v-if 将其从 DOM 中排除,而不是移除元素?或者,它可以被隐藏,但使用v-show 保留在 DOM 中(这可能是我会做的,除非有特定原因需要它不在 DOM 中)。我认为通常让 Vue 管理 DOM 比自己操作要好。

    <template>
      <div v-if="showAlert">
        <b-alert show dismissible variant="danger">
            <i class="mdi mdi-block-helper mr-2"></i>{{ text }}
        </b-alert>
        </div>
    </template>
    
    <script>
     export default {
        name: "alertDanager",
        props: {
            text: null,
            showAlert: true
        },
        created() {
            setTimeout(() => this.hideAlert(), 5000);
        },
        methods: {
            hideAlert() {
                this.showAlert = false
            }
        }
    }
    </script>
    

    【讨论】:

    • 我一直在 github 上查看一些,他们似乎都在这样做。我想我只是习惯了 JQuery。我会试着改变一下我的方式。
    • 我认为,当您开始使用使用虚拟 DOM 的库时,它会执行很多生命周期管理工作,这使得尝试一般地操纵自己是不可取的。
    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 2018-01-21
    • 2017-03-31
    • 2020-11-14
    • 2019-06-03
    • 2018-10-30
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多