我的网站会覆盖特定的DOM,而不是要求加载页面。有时,在DOM内部会有一些Vue.js组件(都是单页组件),这些组件将被覆盖。它们中的大多数都驻留在为构建组件而创建的应用程序中。
两个问题:
我需要销毁这些组件吗?如果是:如何?
这种方法有更好的解决方案吗?
答案 0 :(得分:4)
有一个删除组件的destroy命令:
彻底摧毁一个vm。清除与其他现有虚拟机的连接,取消绑定其所有指令,关闭所有事件侦听器。 触发beforeDestroy并销毁钩子。
https://vuejs.org/v2/api/#vm-destroy
但是如果您只想删除/隐藏一个或多个实例(即通过.$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://vuejs.org/v2/guide/conditional.html#v-if-vs-v-show
答案 1 :(得分:2)
您必须使用本地数据道具并在指令v-show和v-if
中使用<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;
}
}
})