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中defineProperty和Proxy的区别详解
Nov 30 Vue.js
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
vue绑定class的三种方法
Dec 24 Vue.js
vue实现简易的双向数据绑定
Dec 29 Vue.js
基于vuex实现购物车功能
Jan 10 Vue.js
vue-router路由懒加载及实现的3种方式
Feb 28 Vue.js
如何理解Vue前后端数据交互与显示
May 10 Vue.js
vue项目支付功能代码详解
Feb 18 Vue.js
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 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对象在内存中的存在形式分析
2015/02/03 PHP
php实现的用户查询类实例
2015/06/18 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
Python 元类使用说明
2009/12/18 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
Django 外键的使用方法详解
2019/07/19 Python
python输入错误后删除的方法
2019/10/12 Python
基于python实现复制文件并重命名
2020/09/16 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
泰国第一在线超市:Tops
2021/02/13 全球购物
开业庆典邀请函
2014/01/08 职场文书
双十佳事迹材料
2014/01/29 职场文书
预备党员表决心书
2014/03/11 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
小学生学习保证书
2015/02/26 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
会计实训总结范文
2015/08/03 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
python之django路由和视图案例教程
2021/07/26 Python