<keep-alive>包裹动态组件的时候,会缓存不活动的组件实例,而不是摧毁他们。其是一个抽象的组件,自身不会渲染一个DOM元素,也不会出现在父组件链中。
说白了被<keep-alive>包裹的组件其会被缓存
废话不多说直接上例子.
我们现在创建两个子组件conpoment1,compoment2,其内容如下
<template> <div class="wrapper"> <ul class="content"></ul> <button class="add" id="add" @click="add">添加子元素</button> </div> </template> <script> export default { data() { return {}; }, methods: { add() { let ul = document.getElementsByClassName("content")[0]; let li = document.createElement("li"); li.innerHTML = "我是添加的元素"; ul.appendChild(li); } } }; </script> <style > </style>
代码不用解释了吧,就是点击按钮在ul动态添加一个li元素。
接着我们在路由中注册一下,再回到APP.vue中修改一下配置
<template> <div id="app"> <keep-alive> <router-view /> </keep-alive> </template>
这样我们就会发现,当我们切换路由的时候,我们之前添加的子元素还回保存在那里
如果是这样的话所有的页面都被缓存了,一些需要重新加载不需要缓存的我们可以通过v-for来实现。当然我们可以在路由中设置一个key值来判断组件是否需要缓存,就像下面这样
//index.js { path: '/1', name: 'components1', component: Components1, meta: { keepAlive: true //判断是否缓存 } }, { path: '/2', name: 'components2', component: Components2, meta: { keepAlive: false } },
然后我们的App.vue中只需要判断其keepAlive值即可
<div id="app"> <keep-alive> <router-view v-if="$route.meta.keepAlive" /> </keep-alive> <router-view v-if="!$route.meta.keepAlive" /> </template>
这时候我们回到页面中添加子元素并切换路由就会发现只有components1中的组件有缓存。
先说下这个生命周期钩子,官网说其是在服务器端渲染期间不被调用,
说白了其就是在挂载后和更新前被调用的。但如果该组件中没有使用缓存,也就是没有被<keep-alive>包裹的话,activated是不起作用的。我们直接来试一下就知道了。
//components1中 created() { console.log("1激活created钩子函数"); }, activated() { console.log("1激活activated钩子函数"); }, mounted() { console.log("1激活mounted钩子函数"); } //components2中 created() { console.log("2激活created钩子函数"); }, activated() { console.log("2激活activated钩子函数"); }, mounted() { console.log("2激活mounted钩子函数"); }
我们在2个组件中分别打印出其钩子函数执行情况。我们可以看到
在执行components1时候其是执行了activated钩子函数的,而components2则没有,因为components2并没有被<keep-alive>包裹,所以其并不会激活该钩子函数。
当我们再切换一次路由的时候又发现了神奇的地方
组件1中只执行activated钩子钩子函数,而组件2则把创建和挂载的钩子函数都执行了。
这就是缓存的原因,components其对组件进行了缓存所以并不会再一次执行创建和挂载。
简单的说activated()函数就是一个页面激活后的钩子函数,一进入页面就触发;
所以当我们运用了组件缓存时,如果想每次切换都发送一次请求的话,需要把请求函数写在activated中,而写在created或mounted中其只会在首次加载该组件的时候起作用。
keep-alive组件除了actived,还有deactived函数钩子
类型:func
触发时机:keep-alive组件激活时使用;
类型:func
触发时机:keep-alive组件停用时调用;
以上就是vue中activated的用法的详细内容,更多关于vue activated用法的资料请关注站长技术其它相关文章!
绑定/约束 (binding)指两个东西之间的关联。如 名字 与它所代表的事物。又如属...
hi各位大佬好,我又来填坑了,欠的债必须要还,我也写一本书叫《搬砖工真还传》...
阿里云数据库怎么使用 目录 1. 快速入门流程图 2. 创建RDS SQL Server实例 3. 设...
前言 去年12月份,当Kubernetes社区宣布1.20版本之后会逐步弃用dockershim,当时...
一、准备工作 下载vue-quill-editor npm install vue-quill-editor --save 或者 ...
primary key 和 unique区别 主要区别 pri复合主键的时候和唯一即可 nnun:每一个...
前言 由于编程思想与数据库的设计模式不同,生出了一些ORM框架。核心都是将关系...
Spring MVC自定义日期类型转换器实例详解 WEB层采用Spring MVC框架,将查询到的...
经过40多分钟的一面我的暑假实习计划彻底泡汤不过我也没气馁至少我知道了接下来...
简介 “ 大家好我是帅哥欢迎来到帅哥的程序人生我会把经历分享出来助你了解圈内...