vue中activated的用法


Posted in Vue.js onJanuary 03, 2021

keep-alive

<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>

这样我们就会发现,当我们切换路由的时候,我们之前添加的子元素还回保存在那里

vue中activated的用法

如果是这样的话所有的页面都被缓存了,一些需要重新加载不需要缓存的我们可以通过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中的组件有缓存。

activated

先说下这个生命周期钩子,官网说其是在服务器端渲染期间不被调用,
说白了其就是在挂载后和更新前被调用的。但如果该组件中没有使用缓存,也就是没有被<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个组件中分别打印出其钩子函数执行情况。我们可以看到

vue中activated的用法

在执行components1时候其是执行了activated钩子函数的,而components2则没有,因为components2并没有被<keep-alive>包裹,所以其并不会激活该钩子函数。

当我们再切换一次路由的时候又发现了神奇的地方

vue中activated的用法

组件1中只执行activated钩子钩子函数,而组件2则把创建和挂载的钩子函数都执行了。
这就是缓存的原因,components其对组件进行了缓存所以并不会再一次执行创建和挂载。

简单的说activated()函数就是一个页面激活后的钩子函数,一进入页面就触发;

所以当我们运用了组件缓存时,如果想每次切换都发送一次请求的话,需要把请求函数写在activated中,而写在created或mounted中其只会在首次加载该组件的时候起作用。

补充:

keep-alive组件除了actived,还有deactived函数钩子

activated

类型:func

触发时机:keep-alive组件激活时使用;

deactivated

类型:func

触发时机:keep-alive组件停用时调用;

以上就是vue中activated的用法的详细内容,更多关于vue activated用法的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue+iview实现分页及查询功能
Nov 17 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
如何封装Vue Element的table表格组件
Feb 06 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
一篇文章学会Vue中间件管道
Jun 20 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
vue实现登录功能
Dec 31 #Vue.js
vue 实现图片懒加载功能
Dec 31 #Vue.js
vue 动态创建组件的两种方法
Dec 31 #Vue.js
Vue 修改网站图标的方法
Dec 31 #Vue.js
Vue中inheritAttrs的使用实例详解
Dec 31 #Vue.js
vue导入.md文件的步骤(markdown转HTML)
Dec 31 #Vue.js
vue-cli4.0多环境配置变量与模式详解
Dec 30 #Vue.js
You might like
聊天室php&amp;mysql(一)
2006/10/09 PHP
php中用文本文件做数据库的实现方法
2008/03/27 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
Nginx实现反向代理
2017/09/20 Servers
Yii支持多域名cors原理的实现
2018/12/05 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
JS求平均值的小例子
2013/11/29 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
Python常见数据结构详解
2014/07/24 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
pytorch获取模型某一层参数名及参数值方式
2019/12/30 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
为什么会有内存对齐
2016/10/10 面试题
什么是Smart Navigation?
2016/07/03 面试题
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
工作失误检讨书范文大全
2014/01/13 职场文书
小学主题班会教案
2015/08/17 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL