demo1.vue
<template>
<div>demo1</div>
<input type="text" />
</template>
<script>
export default {
data() {
return {};
},
created() {},
computed: {},
methods: {},
};
</script>
<style lang="scoped"></style>
demo2.vue
<template>
<div>demo2</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
computed: {},
methods: {},
};
</script>
<style lang="scoped"></style>
App.vue
<template>
<keep-alive>
<component :is="tabComponent"></component>
</keep-alive>
<button @click="changHandle">切换组件</button>
</template>
<script>
import demo1 from "./components/demo1.vue";
import demo2 from "./components/demo2.vue";
export default {
components: {
demo1,
demo2,
},
data() {
return {
tabComponent: "demo1",
};
},
created() {},
computed: {},
methods: {
changHandle() {
this.tabComponent = this.tabComponent == "demo1" ? "demo2" : "demo1";
},
},
};
</script>
<style lang="scoped"></style>
总结:如果不加 keep-alive 标签进行包裹的话,每次切换都会销毁掉 input 框当中输入的内容