当前位置: 首页 > 知识库问答 >
问题:

javascript - vue-router 如何router.back返回上一个页面,但是不触发页面的onActivated?

诸修伟
2024-05-20

vue3项目中页面的前进后退都会重新刷新页面,使用<keep-alive>解决了这个问题,有些页面必须得进入之后刷新数据,所有我又使用了onActivated方法,但是从上一个页面返回到这个页面,还是会触发这个事件,怎么让他只有跳转到这个页面才触发onActivated, 返回到这个页面的不触发呢?

共有3个答案

白通
2024-05-20

根据作者描述看,需求是回退到当前页面不需要刷新数据,重新进入当前页面需要刷新数据。方案是用keep-alive。同时借助keep-alive标签的include的属性,在进入当前页面时修改include的值,使得当前页面组件可以被匹配保持缓存,退出当前页面时,修改include的值,使得当前页面不被匹配。

阎劲
2024-05-20

不太明白,如果是跳转到这个页面的话就把逻辑写到onShow等方法中不就行了?为什么非要写到onActivated中,这样返回就不会触发,只有跳转才触发。
或这非要都用onActivated可以用Pinia来存储一个标识来区别对待。

国兴文
2024-05-20

要实现只有进入页面时触发 onActivated 而返回时不触发,可以通过维护一些状态来区分是首次进入还是返回。
以下是一种可能的实现方式示例:

import { ref } from 'vue';export default {  setup() {    const isFirstEnter = ref(true);    onActivated(() => {      if (isFirstEnter.value) {        // 在这里执行只有首次进入时要做的事情        isFirstEnter.value = false;      }    });    onDeactivated(() => {      // 当页面离开时,将状态重置为 true,以便下次进入能触发      isFirstEnter.value = true;    });    return {};  },};

这样,当首次进入页面时,isFirstEnter 为 true 会执行相应逻辑并将其设为 false,而后续返回时由于状态已经是 false 就不会再执行特定动作。当页面再次离开并重新进入时,状态又会被重置为 true 从而能再次触发。

 类似资料:
  • 我正在查询URI以从web服务获取一些数据。那很好。但我注意到,我的json hase多页的page\u计数,但只返回第一页数据。 以下是json的样子: 如何返回所有页面而不是只返回第一页?我知道这可能不是个好主意,但我该怎么做? 更新:web服务的URI类似于: 谢谢

  • 有没有一种聪明的方法可以回到Angular 2的最后一页? 像这样的东西 例如,C页有一个返回按钮, > A页- 第B页- 路由器是否有此历史信息?

  • 本文向大家介绍Ajax中responseText返回的是一个页面而不是一个值,包括了Ajax中responseText返回的是一个页面而不是一个值的使用技巧和注意事项,需要的朋友参考一下 自己在struts2中的写好了业务逻辑用response返回的内容却是一个页面的! 然后就去了百度一下,说的是将struts2的返回值设为null(return null),这是因为struts2返回的是一个页面

  • 我有一个php网站,它必须以分页格式在页面上显示项目列表,我使用php实现了这一点,但现在我想在其中添加ajax功能,所以我添加了这个函数,在分页部分单击page no时调用。Ajax/jQuery函数:(.paginate是页面链接的类) 我的分页功能有点像这样: 在我想要显示分页的div的页面上,我得到的是整个页面作为响应,而不是分页的div。我已经将分页的div分离到一个单独的页面,并将其包

  • 1:由于返回的是整个页面 如果用iframe就要生成在后端一个文件才能指向过去 2:如果用document.write 虽然可以把页面显示出来 当时CSS部分无法成功引入

  • 问题内容: 谁能告诉我如何返回上一页而不是特定路线? 使用此代码时: 收到 此错误, 因为没有路由器历史记录 , 所以goBack()被忽略了 这是我的路线: 问题答案: 我想你只需要通过intializing它就像你的路由器上启用BrowserHistory: 。 在此之前,您应该需要从 希望对您有所帮助! UPDATE:ES6中的示例