单个组件动态重新加载,指的是让某个已经渲染的组件,自动销毁然后开始一个新的生命周期。

组件动态重载 大部分情况下,一个需求会很多种实现方法,而接下来要说明的方法,也是众多解决方法之一。

  1. 业务场景 到目前为止,遇到过两个需要实现这种功能的需求:

  2. 后台管理系统中,对页面的功能区域(导航栏、侧边栏之外的区域)进行局部刷新

简单一点的功能页面,或许只需要重新加载接口,触发一下数据更新就够了,但是某些复杂的页面通过更新数据来重载状态,是远不如重新渲染组件来的方便的。

  1. 让一个弹出式的Canvas画布,在依赖的图片源改变时重置,图片未改变时保持不变。

首先这个Canvas组件是通过v-if来实现弹出和关闭的,图片源不变的情况下,关闭再弹出组件是没有变化的,图片源改变的情况下,弹出的组件是初始状态。

  1. 代码 通过外部传入的值进行刷新,指定的props改变时重载:

<script> // 假设 AiPlusComponent 是你要使用的 ai-plus 组件 import AiCanvasPlus from ‘../canvas/plus.vue’; /* 组件 */ let component = null; let name = null; export default { name: ‘keep’, props: {

name: {
  type: String,
  required: true
}

}, render(h) { /* 不加载缓存 */

if (this.name !== name && component) {
  if (component.componentInstance) {
    component.componentInstance.$destroy();
  }
  component = null;
}

/* 保存name */

name = this.name;

if (!component) {

  component = h(AiCanvasPlus, {
    key: this.name
  });
  component.data.keepAlive = true
  return component;
} else {
  return component;
}

} }; </script>

子组件内部触发,触发自定义事件时自动重载:

<script> // 假设 AiPlusComponent 是你要使用的 ai-plus 组件 import AiCanvasPlus from ‘../canvas/plus.vue’; /* 组件 */ let component = null; let name = null; export default { name: ‘keep’, data() {

return {
  name: 'ai'
}

}, render(h) { /* 不加载缓存 */

if (this.name !== name && component) {
  if (component.componentInstance) {
    component.componentInstance.$destroy();
  }
  component = null;
}

/* 保存name */

name = this.name;

if (!component) {

  component = h(AiCanvasPlus, {
    key: this.name,
    onReload(name) {
      this.name = name;
    }
  });
  component.data.keepAlive = true
  return component;
} else {
  return component;
}

} }; </script>

阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。