前端必知必会-Vue “activated”和“deactivated”生命周期钩子 ...

打印 上一主题 下一主题

主题 1892|帖子 1892|积分 5676

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

Vue “activated”和“deactivated”生命周期钩子

正如我们在此页面上看到的,我们有已安装和未安装的生命周期钩子,用于在组件被移除或添加到 DOM 时利用。
已激活和已停用生命周期钩子用于在添加或移除缓存的动态组件(但不从 DOM 中删除)时利用。以下示例中利用 <KeepAlive> 标志来缓存动态组件。
示例
CompOne.vue:
  1. <template>
  2. <h2>组件</h2>
  3. <p>以下是每次运行“已安装”或“已激活”钩子的日志。</p>
  4. <ol ref="olEl"></ol>
  5. <p>您还可以在控制台中查看这些钩子的运行时间。</p>
  6. </template>
  7. <script>
  8. export default {
  9. mounted() {
  10. console.log("mounted");
  11. const liEl = document.createElement("li");
  12. liEl.innerHTML = "已安装";
  13. this.$refs.olEl.appendChild(liEl);
  14. },
  15. activated() {
  16. console.log("已激活");
  17. const liEl = document.createElement("li");
  18. liEl.innerHTML = "已激活";
  19. this.$refs.olEl.appendChild(liEl);
  20. }
  21. }
  22. </script>
  23. <style>
  24. li {
  25. background-color: lightcoral;
  26. width: 5em;
  27. }
  28. </style>
复制代码
App.vue:
  1. <template>
  2. <h1>“activated”生命周期钩子</h1>
  3. <p>在此“activated”钩子示例中,我们检查组件是否已使用 <KeepAlive> 正确缓存。</p>
  4. <p>如果组件已使用 <KeepAlive> 正确缓存,我们期望“mounted”钩子在第一次包含组件时运行一次(必须在第一次添加到 DOM 中),并且我们期望“activated”钩子在每次包含组件时运行(也是第一次)。</p>
  5. <button @click="this.activeComp = !this.activeComp">包含组件</button>
  6. <div>
  7. <KeepAlive>
  8. <comp-one v-if="activeComp"></comp-one>
  9. </KeepAlive>
  10. </div>
  11. </template>
  12. <script>
  13. export default {
  14. data() {
  15. return {
  16. activeComp: false
  17. }
  18. }
  19. }
  20. </script>
  21. <style scoped>
  22. div {
  23. border: dashed black 1px;
  24. border-radius: 10px;
  25. padding: 20px;
  26. margin-top: 10px;
  27. background-color: lightgreen;
  28. }
  29. </style>
复制代码
让我们扩展上面的示例,看看 activated 和 deactivated 钩子是如何工作的。我们还可以利用 mounted 和 unmounted 钩子,如许我们就可以看到 mounted 钩子在第一次添加缓存组件时运行一次,而 unmounted 钩子永远不会为缓存组件运行。
示例
CompOne.vue:
  1. <template>
  2. <h2>组件</h2>
  3. <p>下面是每次运行“activated”、“deactivated”、“mounted”或“unmounted”钩子时的日志。</p>
  4. <ol ref="olEl"></ol>
  5. <p>您还可以在控制台中查看这些钩子何时运行。</p>
  6. </template>
  7. <script>
  8. export default {
  9. mounted() {
  10. this.logHook("mounted");
  11. },
  12. unmounted() {
  13. this.logHook("unmounted");
  14. },
  15. activated() {
  16. this.logHook("activated");
  17. },
  18. deactivated() {
  19. this.logHook("deactivated");
  20. },
  21. methods: {
  22. logHook(hookName) {
  23. console.log(hookName);
  24. const liEl = document.createElement("li");
  25. liEl.innerHTML = hookName;
  26. this.$refs.olEl.appendChild(liEl);
  27. }
  28. }
  29. }
  30. </script>
  31. <style>
  32. li {
  33. background-color: lightcoral;
  34. width: 5em;
  35. }
  36. </style>
复制代码
App.vue:
  1. <template>
  2. <h1>“activated”和“deactivated”生命周期钩子</h1>
  3. <p>在此“activated”和“deactivated”钩子示例中,我们还可以看到“mounted”和“unmounted”钩子何时以及是否运行。</p>
  4. <button @click="this.activeComp = !this.activeComp">包含组件</button>
  5. <div>
  6. <KeepAlive>
  7. <comp-one v-if="activeComp"></comp-one>
  8. </KeepAlive>
  9. </div>
  10. </template>
  11. <script>
  12. export default {
  13. data() {
  14. return {
  15. activeComp: false
  16. }
  17. }
  18. }
  19. </script>
  20. <style scoped>
  21. div {
  22.     border: dashed black 1px;
  23.     border-radius: 10px;
  24.     padding: 20px;
  25.     margin-top: 10px;
  26.     background-color: lightgreen;
  27. }
  28. </style>
复制代码

总结

本文介绍了Vue “activated”和“deactivated”生命周期钩子的利用,如有题目欢迎私信和评论

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

何小豆儿在此

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表