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

使用vue和vue路由器重新加载路由后从父组件获取数据

章承
2023-03-14

我有一个显示多条路线的组件(步骤1、步骤2、步骤3…)一个接一个。我导航并传递属性,如

<router-view
  @next-button-step1="
    $router.push({
      name: 'Step2',
      params: { myprop: thisprop },
    })
    "
    [...]
</router-view>

路线定义为

const routes = [
  {
    path: "/s2",
    name: "Step2",
    component: Step2,
    props: true,
  },

这很有效,直到我重新加载页面/路由,因为数据丢失。所以我有点想在加载组件后从父级获取数据。

我的一个想法是使用本地存储,但这感觉不对。

我是Vue的新手,我想问一下这里的最佳实践是什么。是否像这里描述的那样使用vue路由器重新加载组件?请给我一个提示。

共有1个答案

辛承
2023-03-14

本地存储是否合适取决于用例。

当您重新加载页面/路由时,您说数据丢失了。完全可以存储这些数据,以防止路由更改/重新加载时的数据丢失。但是更改/重新加载页面只能通过将数据存储在localStore(并在页面init上从localstore检索)中,或者将其存储在服务器上并在页面init上检索来解决...

Vuex可能会帮助您进行路由更改/重新加载部分,但即使是Vuex也不会帮助您进行页面更改/重新加载。

我将向您展示如何为第一种情况保存数据的示例:路由更改和重新加载,因为这可以在不添加Vuex的情况下实现。我们将通过将数据放在父组件中并将这些数据传递给我们的路由来实现这一点。当路由更改数据时,它应该发出更新事件(包括更新的数据),父路由应该存储更改的数据。

我将展示一个示例场景,其中父级持有所有数据。路由负责编辑数据的不同方面。每次我在路由之间切换时,父路由提供数据。

这里可以找到一个工作示例:https://jsfiddle.net/b2pyv356/

// parent component / app.vue
<template>

   <div>
        <router-view 
              :state="state" 
              @updatestate="updateState"
        ></router-view>
        
        <pre>Parent state: {{state}} </pre>
    </div>
    

</template>
<script>
export default {
    data() {
        return {
            state: {
                name: 'name',
                lastname: 'lastname'
            }
        }
    },
    methods: {
        updateState(state) {
            this.state = state;
        }
    }
};
</script>
// page1.vue
<template>

    <div>
        Route 1: State is: 
        <pre>{{state}}</pre>
        <div>
            Name: <input v-model="state.name">
            <button @click="$emit('updateState', state)">Save</button><br>
        </div>
        <router-link to="/page2">Next step</router-link>
    </div>

</template>
<script>
export default { props: ['state'] }
</script>
// page2.vue
<template>

    <div>
        Route 2: State is <pre>{{state}}</pre>
        Name: <input v-model="state.name">
        <button @click="$emit('updateState', state)">Save</button><br>
        <router-link to="/">Previous page</router-link>
    </div>

</template>
<script>
export default { props: ['state'] }
</script>

持久化数据:

  • 在updateState上,您可以将数据存储在localStorage中
  • 您可以在请求url($router.params)或页面查询字符串中存储一些数据。这是有限制的:一些浏览器对url的长度进行限制。您还负责验证/清理传入的数据,不要相信它不会被篡改。顺便说一句,localStorage数据也适用于此。常见情况包括存储搜索查询:如果刷新页面,则仍然有搜索查询
  • 让后端保存数据并在页面加载时检索用户的数据
 类似资料:
  • 我有几个路线,每个路线装载3个组件。所有管线上的两个组件都相同。当我在这些路由之间移动时,我希望传递新数据,在组件的某个初始化事件上,我希望填充该组件的数据,以便它反映在UI上。我还想重新触发正在加载的组件的引导动画。我该怎么做呢。因为现在,我不知道在组件的生命周期中,我将在哪里获取数据,并使用这些新数据重新提交组件。具体来说,在myapps/1和/newapp/I中有一个主视图组件和一个侧栏组件

  • 我有一个关于Vuejs和Vue路由器的项目。当用户登录系统时,服务器返回一个带有令牌、用户名和名字的Json文件,该文件存储在localstorage中,以便在以下请求中使用。第一个名称在布局中用于在导航栏中显示欢迎消息。注销后,localstorage被清除,问题就在这里,当其他用户在消息welcome not reload中使用新的名字付费时。

  • 我在这个拉请求中看到: > 重新加载当前路径并再次调用数据钩子 但是当我尝试从Vue组件发出以下命令时: 我得到这个错误: 我搜索了文档,但没有找到任何相关的内容。vue/vue路由器是否提供类似的功能? 我感兴趣的软件版本有: 另外,我知道是备选方案之一,但我正在寻找本机Vue选项。

  • 我是新的vue-router导航后卫,所以我最近意识到我需要使用后卫的重用组件,例如:从到 然而,在进入时,我通过axios调用从数据库中提取数据,在进入之前,我需要通过axios调用再次提取新数据。 这就是我面临的问题,其中导航后卫加载组件之前,我的数据加载从axios调用,因此我得到null在我的几个变量。 如何让等待加载下一个组件,以便从axios调用加载所有数据? 至于我的代码,它看起来是

  • 我希望使用相同的路由路径,根据用户角色为我的用户加载稍微不同的视图。 以前,我已经加载了基于当前域的不同路由: 这种方法只依赖于子域,子域在创建时可用,因此所有内容都可以是同步的。我必须对用户进行身份验证,根据其角色加载正确的路由,然后导出路由器以初始化vue应用程序。 理想情况下,我可以加载基于用户角色的,,,其中可以包含角色的所有路由定义。 我正在使用Feathers-vuex,但我似乎不能等

  • 官方路由 对于大多数单页面应用,都推荐使用官方支持的vue-router库。更多细节可以看vue-router文档。 从零开始简单的路由 如果只需要非常简单的路由而不需要引入整个路由库,可以动态渲染一个页面级的组件像这样: const NotFound = { template: '<p>Page not found</p>' } const Home = { template: '<p>home