我的网站覆盖了特定的DOM,而不是要求页面加载。有时,在DOM中会有一些Vue.js组件(都是单页面组件),这些组件将被覆盖。它们中的大多数驻留在一个应用程序中,该应用程序仅用于构建组件。两个问题:1.我是否需要销毁这些组件?如果是:怎么做?1.有没有更好的解决办法?
j1dl9f461#
有一个destroy命令可以擦除组件:完全销毁一个虚拟机。清理它与其他现有虚拟机的连接,解除所有指令的绑定,关闭所有事件监听器。触发beforeDestroy和destroyed钩子。https://v2.vuejs.org/v2/api/#vm-destroy但是如果你只想删除/隐藏一个或多个示例中的组件(即通过.$mount()或el: "#app"挂载的组件),你应该尝试通过v-if删除组件或通过v-show隐藏组件。在示例模板中,这看起来像:
.$mount()
el: "#app"
v-if
v-show
<my-component v-if="showMyComponent"></my-component> <my-component v-show="showMyComponent"></my-component>
v-show将只设置display:none,而v-if将以与$destroy()相同的方式从DOM中删除组件。https://v2.vuejs.org/v2/guide/conditional.html#v-if-vs-v-show
display:none
$destroy()
n3h0vuf22#
必须使用本地数据属性,并在指令v-show和v-if中使用in
<div id="application"> <vm-test v-if="active"></vm-test> <div @click="toggle()">toggle</div> </div> Vue.component('vm-test', { template: '<div>test</div>' }); var vm = new Vue ({ el: "#application", data: function() { return { active:true } }, methods: { toggle: function() { this.active = !this.active; } } })
https://jsfiddle.net/99yxdacy/2/
dxxyhpgq3#
v-if可以用于此目的。但如果你正在玩父子组件,那么它可能有点棘手。因此,当父组件加载时,使用v-if隐藏子组件,并传递props以显示或隐藏子组件。In my parent component:hideStudentSection作为props传递。传递了一个名为navToParent的事件。当调用从子组件返回时,navToParent将用于重置props。
props
In my parent component
navToParent
<div class="container-fluid" v-if="nav.students"> <div class="row"> <students @navToParent="navToParent" :hideStudentSection="nav.hideStudentSection" /> </div> <div @click="navToChild"> </div> </div> export default defineComponent({ ... method() { navToChild() { this.nav.hideStudentSection = false; this.nav.students = true; }, navToParent() { this.nav.hideStudentSection = true; this.nav.students = false; } } })
In my child component:(注:我只展示了相关的代码)。你可以使用mount来处理你的东西
In my child component
<template> <div class="col-12" v-if="!hideStudentSection"> </div> <div @click="back">back to Parent</div> </template> export default defineComponent({ ... ... props: ["hideStudentSection"], emits: ["navToParent"], mounted() { // use mounted to handle your stuff }, methods: { back() { this.$emit("navToParent"); }, } });
3条答案
按热度按时间j1dl9f461#
有一个destroy命令可以擦除组件:
完全销毁一个虚拟机。清理它与其他现有虚拟机的连接,解除所有指令的绑定,关闭所有事件监听器。触发beforeDestroy和destroyed钩子。
https://v2.vuejs.org/v2/api/#vm-destroy
但是如果你只想删除/隐藏一个或多个示例中的组件(即通过
.$mount()
或el: "#app"
挂载的组件),你应该尝试通过v-if
删除组件或通过v-show
隐藏组件。在示例模板中,这看起来像:
v-show将只设置
display:none
,而v-if
将以与$destroy()
相同的方式从DOM中删除组件。https://v2.vuejs.org/v2/guide/conditional.html#v-if-vs-v-shown3h0vuf22#
必须使用本地数据属性,并在指令v-show和v-if中使用in
https://jsfiddle.net/99yxdacy/2/
dxxyhpgq3#
v-if
可以用于此目的。但如果你正在玩父子组件,那么它可能有点棘手。因此,当父组件加载时,使用
v-if
隐藏子组件,并传递props
以显示或隐藏子组件。In my parent component
:hideStudentSection作为props
传递。传递了一个名为navToParent
的事件。当调用从子组件返回时,navToParent
将用于重置props。In my child component
:(注:我只展示了相关的代码)。你可以使用mount来处理你的东西