动态组件和 keep-alive

动态组件和 keep-alive

//组件一
<template>
  <div>
    组件一
    <input type="text" />
    <input type="text" />
  </div>
</template>
<script>
export default {
  name: "cona",
  data() {
    return {};
  },
};
</script>
//组件二
<template>
  <div>
    组件二
    <input type="text" />
    <input type="text" />
  </div>
</template>
<script>
export default {
  name: "conb",
  data() {
    return {};
  },
};
</script>
<style lang='less'>
</style>

在下面这个组件中调用上面两个组件,使用动态组件进行切换时会销毁掉不活动的组件。当使用keep-alive后,会缓存不活动的组件实例,而不是销毁它们。

<template>
  <div id="parent">
    <!-- <keep-alive>可以使失活的组件保留数据,有三个参数:include/exclude 后面是组件名称(name)或者正则表达式 -->
    <!-- <keep-alive include='cona'>    -->
    <keep-alive :include="/cona/">
      <component :is="comId"></component>
    </keep-alive>
    <button @click="fa">a</button>
    <button @click="fb">b</button>
  </div>
</template>
<script>
import aaa from "./con1";
import bbb from "./con2";
export default {
  name: "parent",
  data() {
    return {
      comId: aaa,
    };
  },
  methods: {
    fa() {
      this.comId = aaa;
    },
    fb() {
      this.comId = bbb;
    },
  },
};
</script>

keep-alive

  • include - 字符串或正则表达式。只有名称匹配的组件会被缓存。
  • exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。
    匹配首先检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的键值)。匿名组件不能被匹配。
  • max - 数字。最多可以缓存多少组件实例。

猜你喜欢

转载自blog.csdn.net/weixin_42123213/article/details/112725238