如何从 vue 中的路由参数在子组件中传递更多数据值?

How can i pass in more data values inside a child component from my route parameter in vue?

所以我很糟糕,真的很不擅长提问,所以我决定制作一个视频,这样我就可以自己解释我想问的问题,简而言之,我可以说我想从一个组件中获得更多可用的数据一个子组件,就像我们在视图 post 页面的 Rails CRUD 应用程序上的 Ruby 上所做的那样。

这是视频,请看视频,废话 --> https://youtu.be/026x-UvzsWU

代码:

行子组件:

<template>
    <tr>
        <td class="name-logo-col">
            <!-- dynamic routes for data -->
        <router-link
        :to="{ name: 'Companies', params: {id : row.Name} }">
        <b>{{row.Name}}</b><br> ...

Sheet分量:

<template>
<div class="container-fluid">
        <div class="row">
            <main role="main" class="col-md-12 ml-sm-auto col-lg-12 pt-3 px-4">
                <div class=" pb-2 ma-3 ">
                    <h2 class="center">Funding</h2>
                    <v-divider></v-divider>
                </div>
                <div class="mb-5 table-responsive">
                <!-- <v-data-table
                    :headers="headers"
                    :items="rows"
                    class="elevation-1">
                </v-data-table> -->
                <table class="table table-striped ">
                    <thead>
                    <tr>
                        <th>Name</th>
                        <th>Funding Date</th>
                        <th>Amount Raised</th>
                        <th>Round</th>
                        <th>Total Raised</th>
                        <th>Founder</th>
                        <th>Est.</th>
                        <th>Location</th>
                        <th>Lead Investor</th>
                    </tr>
                    </thead>
                    <tbody >
                        <Row v-bind:key="row.id" v-for="row in rows" v-bind:row="row" />
                    </tbody>...
                       
                     //data 

                                    rows: [],
            loading: true,
        }
    },
    methods:{
        async accessSpreadSheet() {
            const doc = new GoogleSpreadsheet(process.env.VUE_APP_API_KEY);
            await doc.useServiceAccountAuth(creds);
            await doc.loadInfo();
            const sheet = doc.sheetsByIndex[0];
            const  rows = await sheet.getRows({
                offset: 1
            })
            this.rows = rows;
            this.loading = false;
        }
    },
    created() {
        this.accessSpreadSheet();
        // testing console.log(process.env.VUE_APP_API_KEY)
    }

这是我查看公司动态路由器子组件的地方:

     <template>
  <v-container class="fill-height d-flex justify-center align-start" >
    <h3> Company component: {{ $route.params.id }}  </h3>
    <p> {{$route.params.Location}}  </p>
  </v-container>
</template>

<script>
export default {
  name: "Company",
  data() {
    return {
    }
  }
}
</script>

这是子公司的父组件公司:

<template>
  <v-container class="fill-height d-flex justify-center align-start" >
    <div>
      <h1> Companies man view </h1>
      <Company/>
      <router-link  to="/funds">
        Back
      </router-link>
   </div>
  </v-container>
</template>

<script>
import Company from '@/components/Company.vue'

export default  {
  name: "Companies",
  components: {
    Company
  },

}
</script>

这是我的路由器link索引页面相关代码:

{
    path: '/companies/:id',
    name: 'Companies',
    props: true,
  component: () => import(/* webpackChunkName: "add" */ '../views/Companies.vue')
  }
]


const router = new VueRouter({
  mode: 'history',
  routes,
  store
})

所以我看了视频,我认为你从错误的角度来处理这个问题。

您似乎不熟悉 Vuex,您可能会假设您通过 $route 传递所有数据,这不是它的用途。

所以这将是理想的流程:

  • 您从 API
  • 获取数据
  • 数据存储在 Vuex 存储中
  • 用户导航到页面
  • Param.id 从 $route
  • 获取
  • Id 作为 getter
  • 中的参数发送到 Vuex 存储
  • Getter returns 数据到按 id
  • 过滤的组件
  • 数据在组件中使用

这样做可以使您的所有数据集中并可在任何组件中重复使用。您甚至可以通过转到 Chrome 工具并单击 Vuex 选项卡来实时查看 Vuex 商店中的内容。

如果您还有其他问题,请告诉我!

我不太确定我是否理解了整个问题,但我会尝试回答我理解的部分。
如果您想传递行内的其他元素而不仅仅是名称或位置以使用名称“Companies”进行路由,那么您的第一个代码实际上只需要稍作更改。 你只需要传递整行并且不要忘记将它解析成一个字符串,所以数据将在重新加载后保留。

<router-link
    :to="{ name: 'Companies', params: {id : JSON.stringify(row)} }">

然后使用 JSON.parse($route.params.id).

将其解析回 Companies 组件内的 JSON

您可以使用多个参数,因此不要将路由器索引中的参数命名为 path: '/companies/:id,而应将其命名为 path: '/companies/:Name/:Location',然后传递其他参数的数据。

<router-link
    :to="{ name: 'Companies', params: { Name: row.Name, Location: row.Location } }">

但是所有参数都是必须的,所以你每次都必须给所有参数传递值。

比起params,你可以用query,更灵活。您可以在不修改路由器索引内路径的情况下传递任何其他查询。

<router-link
    :to="{ name: 'Companies', query: { Name: row.Name,Location: row.Location } }">

并从您的路由器索引中删除 /:id,因此它只是 path: '/companies'

之后,您可以使用 $route.query.Name

直接访问 Companies 组件内的查询值