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

使用beforeEnter传递数据以路由组件

姜天宇
2023-03-14

我将如何让 beforeEnter 调用的函数将数据传递给相应的路由组件?

在这种情况下,beforeEnter 的目的是确认有效的持有者令牌以 cookie 的形式存在。

目前,我让< code>beforeEnter在< code>/verify/auth上点击aws api网关,然后组件加载并调用< code>/list/repos上的dynamodb。问题是,两条路线都受到内置AWS api gatewayV2 JWT授权器的保护,所以点击< code>/verify/auth是没有意义的。

我想做的是使befor回车点击/list/repos,利用内置的JWT授权器,并使用从api调用中获得的数据加载下一页。如果用户没有经过正确的身份验证,beFore起初不会将用户发送到路由。

所以:

  • api调用-

而不是

  • api调用-

这是我的密码。我在这里看过一个类似的问题,但我想不通。在Enter之前将数据传递到路由的组件

索引.js

let repositories = [];

async function listRepositories(to, from, next) {
  var isAuthenticated = false;
  console.log("testing listRepositories...");
  if (Vue.$cookies.get("Authorization")) {
    try {
      const response = await fetch(
        process.env.VUE_APP_API_GATEWAY_ENDPOINT + "/list/repos",
        {
          method: "POST",
          body: '{"repo_owner": "sean"}',
          headers: {
            Authorization: Vue.$cookies.get("Authorization")
          }
        }
      );
      repositories = await response.json();
      console.log(repositories);
      if (repositories.message != "Unauthorized") {
        isAuthenticated = true;
        // return {
        //   repositories
        // };
        next();
      }
    } catch (error) {
      console.error(error);
    }
  }
  if (!isAuthenticated) {
    console.log("error not authenticated");
    to("/");
  }
}

const routes = [
  {
    path: "/",
    name: "Login",
    component: () => import("../views/Login.vue")
  },
  {
    path: "/repos",
    name: "Repos",
    // beforeEnter: isAuthenticated,
    beforeEnter: listRepositories,
    props: repositories => {
      {
        repositories;
      }
    },
    component: () => import("../views/Repos.vue")
  }
];

./views/Repos.vue

<template>
  <div id="app" class="small-container">
    <repo-table
      :repositories="repositories"
    />
  </div>
</template>

<script>
import RepoTable from "@/components/RepoTable.vue";

export default {
  name: "Home",
  components: {
    RepoTable
  },
  data() {
    return {};
  },
  props: {
    repositories: {
      type: Array
    }
  }
</script>

./components/RepoTable.vue

<template>
  <div id="repository-table">
    <table border="0">
      <tr>
        <th style="text-align:left">Repository</th>
        // omitted for brevity
      </tr>
      <tbody>
        <tr v-for="(repo, index) in repositories" :key="repo.repo_name">
          <td>
            <b>{{ repo.repo_name }}</b>
            // omitted for brevity
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
export default {
  name: "repository-table",
  data() {
    return {
      // repositories: []
    };
  },
  props: {
    repositories: {
      type: Array
    }
  },

共有1个答案

慕仲渊
2023-03-14

您可以使用路由参数传递来自beFore起初的数据。当props的值为true时,路由参数将转换为props:

props: true

现在您只需要一个名为repositories的参数,它将作为道具传递到目的地。在您的beFore起初中,当用户通过身份验证时,您可以添加该参数:

if (repositories.message != "Unauthorized") {
  isAuthenticated = true;
  to.params.repositories = repositories;  // ✅ Adding the data to the param
  next();
}

其他修复:

  • 更改为 ('/') 到 next('/')
  • 在每个逻辑路径中添加下一个,例如,当出现错误时,当两者都不满足条件时。
  • 每次你打电话给下一个调用它,返回像返回下一个

另一种选择:

您也可以使用 beforeRouteEnter 组件内防护来实现此目的。

 类似资料:
  • 在几个儿童显示器中的一个中: 似乎我不能直接将数据注入。看起来我在web控制台中遇到了错误: 这有点道理,但是我该怎么做: 从服务器从父组件中获取“节点”数据? 是否将从服务器检索到的数据传递到子路由器插座? 的工作方式似乎不同。

  • 在我的Angular 2路由的一个模板(FirstComponent)中,我有一个按钮 first.component.html 我的目标是实现: 按钮点击->route to另一个组件,同时保留数据,而不使用另一个组件作为指令。 这是我试过的... 第一种方法 在同一个视图中,我存储、收集基于用户交互的相同数据。 First.Component.TS 通常通过ID路由到SecondCompone

  • 有什么简单的方法可以实现这一点吗? 这是我导航到路线的代码 这是我的路由模块 基本上,我希望执行与CreateAlbum组件是当前组件的子组件相同的操作,在这种情况下,我将使用@Input()

  • 我在使用Vue路由器将数据从一个组件传递到另一个组件时遇到问题。 我在主组件中有此模板: 在我的组件中,我有以下数据功能: 第二个链接将发送到名为的组件。 如何将数据从传递到,然后显示在那里? 谢谢

  • 我正在使用react样板文件,它在route.js中使用异步调用来提供组件。 在“/”路径中加载的组件定义为:

  • 我正在研究这个angular2项目,其中我使用从一个组件导航到另一个组件。 有两个组件。i、 例如, 我想从PagesComponent导航到DesignerComponent。 到目前为止其路由正确但我需要通过 我尝试使用RouteParams,但它的获取页面对象。 下面是我的代码: 页面.组件. ts 在html中,我正在执行以下操作: 在 DesignerComponent 构造函数中,我完