keep-alive是vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM;
keep-alive包裹动态组件的时候,会缓存不活动的组件实例,而不是销毁他们;
例如:
有这样一个页面
food.vue中
<template> <div> <h1>button1页面:</h1> food页面,参数:{{$route.params.id}} </div> </template> <script> export default { name: "food", created(){ console.log("food组件被创建") }, mounted() { console.log("food组件被加载了") }, destroyed() { console.log("food组件被销毁了") } } </script>
rating.vue中
<template> <div> <h1>button2页面:</h1> rating页面,参数:{{$route.params.id}} </div> </template> <script> export default { name: "rating", created(){ console.log("rating组件被创建") }, mounted() { console.log("rating组件被加载了") }, destroyed() { console.log("rating组件被销毁了") } } </script>
当点击button1时,显示页面1,点击button2时,显示页面2;但是在切换的过程是:
food组件被创建——>food组件被加载——>(点击button2)——>rating组件被创建——>food组件被销毁——>rating组件被加载了;
切换不同组件时,会不断销毁,加载;
当用keep-alive包裹后:
<keep-alive> <router-view></router-view> </keep-alive>
组件被缓存,不会因为加载一个而销毁另一个,无论切换多少次都是图片中的两次创建,两次加载。