首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否使用vue-router保留组件状态?

是否使用vue-router保留组件状态?
EN

Stack Overflow用户
提问于 2017-01-20 21:26:51
回答 5查看 19.3K关注 0票数 32

我有一个列表/详细信息用例,其中用户可以双击产品列表中的项目,转到详细信息屏幕进行编辑,然后在完成编辑后返回到列表屏幕。我已经使用这里描述的动态组件技术做到了这一点:https://vuejs.org/v2/guide/components.html#Dynamic-Components。但现在我计划在应用程序中的其他地方使用vue-router,我想重构它以使用路由。使用我的动态组件技术,我使用了keep-alive来确保当用户切换回列表视图时,会出现与编辑前相同的选择。但在我看来,通过路由,产品列表组件将被重新呈现,这不是我想要的。

现在,看起来路由器视图可以被包装在keep-alive中,这将解决一个问题,但会引入许多其他问题,因为我只想让该路由保持活动状态,而不是所有路由(目前我只使用一个顶级路由器视图)。Vue 2.1通过为路由器视图引入包含和排除参数,显然已经解决了这个问题。但是我也不想这样做,因为在我的主页前面声明所有应该或不应该使用keep-alive的路由似乎非常笨拙。在配置路由时(即,在routes数组中)声明是否希望保持活动会更简洁。那么我最好的选择是什么呢?

EN

回答 5

Stack Overflow用户

发布于 2019-03-22 17:16:14

您可以指定要保持活动状态的路由,如下所示:

代码语言:javascript
复制
<keep-alive include="home">
  <router-view/>
</keep-alive>

在这种情况下,只有本地路由将保持活动状态

票数 31
EN

Stack Overflow用户

发布于 2018-02-08 21:38:38

我也遇到了类似的问题,并查看了Vuex,但我认为它需要在代码中进行太多的更改/添加才能添加到项目中。

我找到了这个库https://www.npmjs.com/package/vue-save-state,它为我解决了这个问题,使1个组件的状态与localStorage保持同步,并且只需要几分钟和几行代码(所有这些都记录在包的Github页面中)。

票数 4
EN

Stack Overflow用户

发布于 2020-11-28 17:30:09

一个没有localStorage的解决方案:

代码语言:javascript
复制
import {Component, Provide, Vue} from "vue-property-decorator";

@Component
export default class Counter extends Vue {
  @Provide() count = 0

  /**
   * HERE
   */
  beforeDestroy() {
    Object.getPrototypeOf(this).constructor.STATE = this;
  }

  /**
   * AND HERE
   */
  beforeMount() {
    const state = Object.getPrototypeOf(this).constructor.STATE;
    Object.entries(state || {})
        .filter(([k, v]) => /^[^$_]+$/.test(k) && typeof v !== "function")
        .forEach(([k]) => this[k] = state[k]);
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41764825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档