Vue 中activated的用法

Vue 中activated的用法

1. keep-alive

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

修改App.vue中的代码如下:

<template>
 <div id="app">
  <keep-alive>
   <router-view />
  </keep-alive>
</template>

当我们切换路由的时候,我们之前添加的子元素还回保存在那里:

图片说明

如果是这样的话所有的页面都被缓存了,一些需要重新加载不需要缓存的我们可以通过v-if来实现。当然我们可以在路由中设置一个bool值来判断组件是否需要缓存,就像下面这样

// index.js
{
    path: '/1',
    name: 'component1',
    component: () => import('../components/component1'),
    meta: {
      keepAlive: true // 判断是否缓存
    }
  },
  {
    path: '/2',
    name: 'component2',
    component: () => import('../components/component2'),
    meta: {
      keepAlive: false
    }
  }

然后我们的App.vue中只需要判断其keepAlive值即可

 <div id="app">
  <keep-alive>
   <router-view v-if="this.$route.meta.keepAlive" />
  </keep-alive>
  <router-view v-if="!this.$route.meta.keepAlive" />
</template>

这时候我们回到页面中添加子元素并切换路由就会发现只有components1中的组件有缓存。

2. 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个组件中分别打印出其钩子函数执行情况。我们可以看到

图片说明

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

当我们再切换一次路由的时候,出现如下结果:

图片说明

组件1中只执行 activated 钩子函数,而组件2则把创建和挂载的钩子函数都执行了。

这就是缓存的原因,components1对组件进行了缓存所以并不会再一次执行创建和挂载。

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

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

3. deactivated

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

Vue.js 文章被收录于专栏

Vue.js

全部评论

相关推荐

01-02 20:08
马鞍山学院 Java
27届学院本誓死冲击...:实习经历最好写上做了什么项目,负责什么业务,否则有点假
点赞 评论 收藏
分享
行云流水1971:你的简历已经有不错的内容基础,但在岗位匹配度、成果量化、逻辑分层上还有优化空间,我结合产品 / 金融科技类岗位偏好帮你调整: 一、现有问题 & 优化方向 信息冗余:课程 / 学生工作与目标岗位关联弱,可精简; 成果颗粒度不足:部分数据缺少 “对比基准”(比如 “效率提升” 没说之前的情况); 岗位标签弱:产品岗核心能力(如需求闭环、PRD 撰写)体现不够突出。 二、优化后简历(以 “金融科技产品岗” 为例) 教育经历 2023.09-2027.06 郑州轻工业大学(公办一本) | 软件工程 | 本科 核心课程:Java 程序设计、数据库原理、Python(匹配产品岗 “技术理解” 需求) 学习成果:专业核心课 90+,获校级一等奖学金; 学生工作:院学生会主席,统筹 6 场校级活动(覆盖 2000 + 人次),锻炼跨部门协作与项目统筹能力。 实习经历
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务